我不完全理解您要达到的目标,但总的来说:
您不必担心谁以及何时释放/解除分配对象。相反,只需确保在您(您的单个对象或方法)开始需要它时保留它,并在您停止需要它时释放它(或自动释放它,在这种情况下,它将在您调用 autorelease 的线程上释放)。
这正是工作的方式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.
或者
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];
你现在拥有它的方式是内存泄漏。
领取方式:
- 如果它仅在内部使用该对象,则不必保留它,因为
performSelector
“直到它执行之后”(方法返回)。
- 如果以后需要它,则应将其分配给保留它的属性。