2009-01-15 56 views

回答

3

找到了答案(您可以使用这些语句来实现这一点):

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

OR

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

另一种方法是

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

克里斯。

2

如果您已经创建了一个NSThread和你扶住NSThread对象,随后就可以发送更多的消息,该线程使用进行:

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

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

还要确保您是否在做任何接口更新,并将其委托给主线程。更新可能会或可能不会工作,如果你不

[self performSelectorOnMainThread:@selector(someSelector:) 
       withObject:passedInObject waitUntilDone:NO]; 

chris。

2

找到了答案,以我自己的问题:

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

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

在Cocoa应用程序中的每个线程 维护自己的 NSAutoreleasePool对象的堆栈。当 线程终止时,它会自动释放与其自身关联的所有自动释放池 。自动发布 池自动创建和 销毁主线程 应用程序基于应用程序 套件,所以你的代码通常不会 必须在那里处理它们。如果您在 应用套件的主线程 以外拨打可可电话,您需要创建自己的 自动释放池。如果您正在编写仅基金会 应用程序或如果您分离线程,则这种情况是 。

相关问题