3

我是多线程的新手,需要一些建议。

我在我的代码中使用了 ARC。

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

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

//start the thread 
[mSomeThread start]; 

mSomeThread伊瓦尔在哪里

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

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

4

2 回答 2

0

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

于 2012-06-03T08:24:12.320 回答
-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];
        }
}
于 2012-06-03T08:13:53.407 回答