我正在为iOS编写多线程应用程序。 我是Objective-C的新手,所以我之前没有玩iPhone中的线程。
通常在使用Java时,我创建一个线程,并将“self”作为对象发送给线程。从线程我可以调用主线程。 如何在Objective C中完成?
如何从线程调用主线程?我一直在尝试使用NSNotificationCenter,但是我收到了一个sigbart错误:/
这是线程的启动方式:
NSArray *extraParams = [NSArray arrayWithObjects:savedUserName, serverInfo, nil]; // Parameters to pass to thread object
NSThread *myThread = [[NSThread alloc] initWithTarget:statusGetter // New thread with statusGetter
selector:@selector(getStatusFromServer:) // run method in statusGetter
object:extraParams]; // parameters passed as arraylist
[myThread start]; // Thread started
activityContainerView.hidden = NO;
[activityIndicator startAnimating];
任何帮助都会很棒!
答案 0 :(得分:1)
通过向主线程的运行循环添加消息来实现此目的。
基金会为此提供了一些便利,特别是-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]
和NSInvocation
。
使用前者,您可以简单地写出:
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO]
可以从辅助线程(通常是调用线程)调度通知。
答案 1 :(得分:1)
您可以使用performSelectorOnMainThread:withObject:waitUntilDone:
,或者,如果您的目标是iOS 4及更高版本,则可以使用Grand Central Dispatch,它不需要您实现仅与主线程同步的方法:
dispatch_async(dispatch_get_main_queue(), ^ {
// Do stuff on the main thread here...
});
这通常使您的代码更易于阅读。
答案 2 :(得分:0)
虽然这不是您问题的直接答案,但我强烈建议您查看Grand Central Dispatch。它通常比直接使用线程提供更好的性能。
Justin指出,如果你真的需要,你可以通过调用performSelectorOnMainThread
来在主线程中执行一个函数。