通过多线程实现的最佳方式

时间:2012-06-03 07:56:52

标签: iphone objective-c ios nsthread

我对多线程很陌生,需要一些建议。

我在代码中使用ARC。

问题:我在我的应用中设置了NSTimer,每隔1秒触发一些创建和启动线程的方法

//Create a new thread
mSomeThread = [[NSThread alloc] initWithTarget:self selector:@selector(someMethod) object:nil]; 

//start the thread 
[mSomeThread start]; 

mSomeThread是ivar

假设mSomeThread的执行时间超过1秒,并且mSomeThread被第二次分配,即根据ARC“规则”释放之前再分配一次。

这是否意味着第一个线程没有完成并且被迫完全?

2 个答案:

答案 0 :(得分:0)

NSThread在执行期间保留自己。重置mSomeThread不会导致正在运行的线程过早终止。

答案 1 :(得分:-1)

是。如果你真的需要继续引用someMethod的当前执行线程,那么你需要等到它才能真正启动新线程。 一个快速的方法是添加

while ([mSomeThread isExecuting]) {
    sleep(1);
}

[mSomeThread start];之后。

顺便说一句,我宁愿重新实现NSThread并在其main实现中设置重复的NSTimer。 类似的东西:

- main {
      @autoreleasepool {
          [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(someMethod) userInfo:nil repeats:NO];
          [[NSRunLoop currentRunLoop] run];
        }
}