Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 是否保留对NSThread的引用并向其对象发送消息?_Cocoa_Nsthread - Fatal编程技术网

Cocoa 是否保留对NSThread的引用并向其对象发送消息?

Cocoa 是否保留对NSThread的引用并向其对象发送消息?,cocoa,nsthread,Cocoa,Nsthread,我有点不确定如何做到这一点: 我启动一个“工作线程”,在我的应用程序“生命”期间运行 然后 现在,线程每5秒“唤醒”(initWithTimerInterval)一次,查看是否 它可以完成任何任务。BackGroundUpdate类中的所有任务目前仅与时间相关。我想有一些是“事件相关的”。e、 我想从我的主线程调用背景对象,并告诉它“加速”、“减速”、“重置”或对象上的任何方法 要做到这一点,我想我需要类似于performSelectorOnThread的东西,但是如何获取对NSthread和后

我有点不确定如何做到这一点:

我启动一个“工作线程”,在我的应用程序“生命”期间运行

然后

现在,线程每5秒“唤醒”(initWithTimerInterval)一次,查看是否 它可以完成任何任务。BackGroundUpdate类中的所有任务目前仅与时间相关。我想有一些是“事件相关的”。e、 我想从我的主线程调用背景对象,并告诉它“加速”、“减速”、“重置”或对象上的任何方法


要做到这一点,我想我需要类似于
performSelectorOnThread
的东西,但是如何获取对NSthread和后台对象的引用?

直接回答:使用[[NSthread-detachNewThreadSelector:toTarget:withObject:]而不是+[NSthread-detachNewThreadSelector:toTarget:withObject:]。别忘了打电话启动

其他想法:

  • 考虑改用NSOperation/NSOperationQueue。对于大多数辅助线程使用来说更简单、更高效
  • 考虑您是否真的需要在后台线程上执行定期检查。您是否可以在主运行循环上执行此操作,然后根据需要将工作转移到其他线程上?线程不是免费的
  • 考虑轮询是否也是最好的实现。查看NSCondition和/或NSConditionLock,以获得更有效的方法,在发生不需要轮询的情况下(例如向队列添加工作)唤醒线程

谢谢你,B先生。最近我在很多事情上使用了NSOperation,这需要一点时间来适应,但它确实是值得的。如此复杂的东西在哪里可以被证明是合理的=子类NSoperation,简单的一次性东西detach或performSelector。再次感谢。
[NSThread detachNewThreadSelector:@selector(updateModel) toTarget:self withObject:nil];
- (void) updateModel {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    BackgroundUpdate *update = [[BackgroundUpdate alloc] initWithTimerInterval:5];
    [[NSRunLoop currentRunLoop] run];   //keeps it going 'forever'
    [update release];
    [pool release];
}