Luc*_*lon 0 cocoa-touch objective-c autorelease nsautoreleasepool ios4
我有一个对象的方法,它创建对象,然后传递给另一个线程中的另一个对象的方法,如下所示:
MyClass* myClass = [[MyClass alloc] init];
[anotherClass performSelectorOnMainThread:@selector(method) withObject:myClass waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)
在方法中,我立即保留该对象,假设它将以某种方式由创建者释放.我的问题是:如何让MyClass正确发布该对象?这是正确的方法吗?
我的解决方案是在方法中手动释放对象.无论如何,我看到泄漏分析仪仍然认为这是泄漏,似乎它不是Apple推荐的,因为所有者有责任释放对象.
你能解释一下处理这种情况的正确方法吗?谢谢!
我不完全明白你想要实现的目标,但总的来说:
您不应该担心释放/取消分配对象的人员和时间.相反,只需确保在您(您的单个对象或方法)开始需要它时保留它并在您停止需要它时释放它(或自动释放它,在这种情况下它将在您称为自动释放的线程上释放).
这正是performSelectorOnMainThread:withObject:waitUntilDone:作品的方式.从文档:
此方法保留接收器和arg参数,直到执行选择器.
它保留了它们,而它需要它们才能完成它的工作.
简而言之,创建对象并将它们发送到另一个线程的方法应该是:
MyClass* myClass = [[MyClass alloc] init]; // retained, will need it for performSelector
[anotherClass performSelectorOnMainThread:@selector(method) withObject:myClass waitUntilDone:NO];
[myClass release]; // no longer needing it.
Run Code Online (Sandbox Code Playgroud)
要么
MyClass* myClass = [[[MyClass alloc] init] autorelease]; // will be released automatically, but guaranteed to be retained until this method returns
[anotherClass performSelectorOnMainThread:@selector(method) withObject:myClass waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)
你现在的方式是内存泄漏.
接收方式:
performSelector"直到它执行后"(该方法返回).| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |