メソッドをバックグラウンドで実行しようとしていますが、プログラムをブロックしています。 これは私のコードです:Objective-Cでのマルチスレッド
- (void)viewDidLoad
{
[super viewDidLoad];
self.MessagesList=[[MessagesArray alloc] init];
[self performSelectorInBackground:@selector(backgroundMethod) withObject:nil];
}
-(void)backgroundMethod
{
if ([MessagesList updateFromServer]){
[self.Table reloadData];
CFRunLoopRun();
}
}
updateFromServerがサーバにHTTPリクエストを送信し、応答を待っている間、サーバは10秒で応答を遅延させ、その結果、プログラム全体が10秒遅れで表示されていることですあまりにも。私を訂正できますか?
更新:私はランループラインを追加しましたが、問題は変わりません。 HTTPリクエストは非同期ですが、サーバー全体が応答するまでプログラム全体が待機します。これは私のupdateFromServerメソッドです:
responseData = [NSMutableData data];
[self setBaseURL:[NSURL URLWithString:@"http://localhost:8000/messages/views/new_messages/"]];
NSURLRequest *request =
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:8000/messages/views/new_messages/"]];
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
return TRUE;
私はそれを実際に非同期にすることはできますか?
代わりにNSThreadを使うのはどうですか? –
私もそれを試しました。何も変わりません。ありがとう –