触发在单独线程中运行的方法

时间:2009-01-15 13:05:02

标签: cocoa-touch multithreading

我想知道如何在单独的线程中运行方法?班级&方法参考。感谢。

5 个答案:

答案 0 :(得分:4)

另一种选择是

[someObject performSelectorInBackground:@selector(someSelector:) 
        withObject:nil];

克里斯。

答案 1 :(得分:3)

找到答案(您可以使用以下任一语句来实现此目的):

[NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil]; 

OR

NSThread *myThread = [[NSThread alloc] initWithTarget:self
                     selector:@selector(myThreadMainMethod:) 
                     object:nil]; 
[myThreadstart]; 

答案 2 :(得分:2)

如果您已经创建了NSThread而且您已经保留了NSThread对象,则可以随后使用以下命令发送更多要在该线程上执行的消息:

–[NSObject performSelector:onThread:withObject:waitUntilDone:]

答案 3 :(得分:2)

找到我自己的问题的答案:

  

当我开始一个新的方法   单独的线程,为什么我需要一个   NSAutoreleasePool对象就在那   方法?如果我不添加它,我会得到一个   日志中的池堆栈。

自动释放池和线程(来自Apple.com的MemoryMgmt.pdf):

  

Cocoa应用程序中的每个线程   维持自己的堆栈   NSAutoreleasePool对象。当一个   线程终止,它会自动终止   释放所有自动释放池   与自身相关联。自动释放   池自动创建和   在主线程中被摧毁   基于应用程序的应用程序   套件,所以你的代码通常不会   必须在那里处理它们。如果你   正在将Cocoa调用到外面   应用套件的主线程,   但是,你需要创建自己的   自动释放池。如果是这样的话   你正在写一个基金会   应用程序或分离线程。

答案 4 :(得分:1)

您需要一个新的自动释放池来处理该线程中的所有自动释放。主线程有一个在你到达代码之前由框架自动创建的。

还要确保您是否正在进行任何接口更新,并将其委托给主线程。如果您不

,更新可能会或可能不会
[self performSelectorOnMainThread:@selector(someSelector:) 
               withObject:passedInObject waitUntilDone:NO];

克里斯。