如果线程A向线程B发送对象的引用,例如使用performSelector:onThread:withObject:waitUntilDone
,那么应该如何进行内存管理?调用线程alloc
应该是对象还是被调用线程release
吗?
编辑:
事实证明performSelector:onThread:withObject:waitUntilDone
保留了对象,直到选择器(将在另一个线程的运行循环中调用)完成。所以调用线程应该分配,然后调用performSelector,然后释放。
答案 0 :(得分:2)
可以防止过度泄漏或涂鸦的一个选项是传递包裹在boost :: shared_ptr中的内存。当然,当多个线程具有可以访问它的shared_ptr时,您可以保证内容的使用是线程安全的,这将确保保留相关内存的最终用户的范围将导致它被释放
答案 1 :(得分:2)
事实证明performSelector:onThread:withObject:waitUntilDone
保留了对象,直到选择器(将在另一个线程的运行循环中调用)完成。因此调用线程应alloc
,然后调用performSelector:onThread:withObject:waitUntilDone
,然后调用release
。
答案 2 :(得分:1)
我不确定这里是否有“正确”的答案。如果调用线程已退出或无法跟踪内存不再使用并释放它,我想你必须在被调用的线程中执行它。但是,一般来说,我更喜欢将内存释放到与分配时相同的线程中,最好在代码附近。
我认为关键是清楚地记录您的期望并保持一致性。