1

这点我可能想多了。

// Inside some method...
NSThread *thread = [[NSThread alloc] initWithTarget:functionWrapper selector:@selector(run) object:nil];
[thread start];

在此之后调用[thread release]:A. 避免内存泄漏并且是必要的,或者...... B. 会破坏事物。

这个问题的答案表明线程在完成执行后会释放自己,但是该行为记录在哪里?

4

2 回答 2

5

是的,您必须在一段时间后通过自动发布或发布来发布它。

但是,您实际上并不需要首先初始化自己的线程,objective-c 有很多方法可以让您实现线程,而无需自己分配新线程,例如

[self performSelectorInBackground:@selector(yourMethod) withObject:nil];

还有一些 NSOperations 也允许您将任务排队。

于 2012-07-17T01:13:21.803 回答
2

作为一般规则:如果对对象调用 alloc、new 或 copy,则必须释放它。

一旦该线程的生命周期完成(或在您的 dealloc 函数中),调用[thread release].

与您链接到的答案不同,您会看到他在字符串末尾有自动释放(自动释放是上述规则不适用的实例,在这些情况下,对象将在结束时自动释放当前主运行循环,使其在整个当前范围内都处于活动状态)。

于 2012-07-17T01:08:59.060 回答