我想知道如何在单独的线程中运行方法?班级&方法参考。感谢。
答案 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];
克里斯。