我对多线程很陌生,需要一些建议。
我在代码中使用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“规则”释放之前再分配一次。
这是否意味着第一个线程没有完成并且被迫完全?
答案 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];
}
}