【发布时间】:2011-01-08 10:17:20
【问题描述】:
我有一个对象的方法,它创建对象然后传递给另一个线程中另一个对象的方法,如下所示:
MyClass* myClass = [[MyClass alloc] init];
[anotherClass performSelectorOnMainThread:@selector(method) withObject:myClass waitUntilDone:NO];
在方法中,我立即保留对象,假设它会被创建者以某种方式释放。我的问题是:如何让 MyClass 正确释放该对象?这是正确的方法吗?
我的解决方案是在方法中手动释放对象。无论如何,我看到泄漏分析器仍然将其识别为泄漏,并且似乎不是 Apple 推荐的,因为所有者有责任释放该对象。
你能解释一下处理这种情况的正确方法吗?谢谢!
【问题讨论】:
-
哎呀,对不起,我忘记了一个重要的元素:执行我报告的指令的线程不是 Cocoa 线程。我使用 POSIX 线程创建了它。
-
Cocoa 线程和 POSIX 线程没有区别。但请确保在线程开始时创建一个自动释放池。
-
我读到还需要创建至少一个 NSThread 才能使用 NSAutoreleasePools。
标签: objective-c cocoa-touch ios4 autorelease nsautoreleasepool