我正在处理别人的代码。我遇到了一行代码
[NSThread detachNewThreadSelector:@selector(myMethod) toTarget:self withObject:nil];
我有两个问题要问。
答案 0 :(得分:3)
以这种方式使用NSThread意味着在后台线程上调用方法“myMethod”,与其余代码同时进行。它等同于你,你可能也看到过:
[self performSelectorInBackground:@selector(myMethod) withObject:nil];
如果没有调用该方法(或者似乎没有被调用),则可能是并发问题,即该方法的执行顺序和您在主线程上调用之后的执行顺序无法保证,所以你期望它早于实际调用。
如果你说:
[NSThread detachNewThreadSelector:@selector(methodA) toTarget:self withObject:nil];
[self methodB];
然后methodA和methodB将同时运行 ,并且无法保证methodA将在methodB之前完成。
答案 1 :(得分:2)
我总是将NSThread detachNewThreadSelector
与自动发布池结合使用,如下所示:
-(void)myMethod {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
// .. Do stuff in this thread
[pool release];
};
如果您想“简单地”执行选择器,请执行以下操作:
[self performSelector:@selector(myMethod)];