据我记得,performSelectorOnMainThread:
在 Apple 的文档中,我们有类似(和变体)保留对象直到方法完成执行“。那么我们可以依赖 ios6 中的这种行为吗?因为NSObject 类参考中没有任何信息现在。同样的问题,如果我更喜欢使用 GCD dispatch_async
/ sync
- 如果我在后台线程中创建了对象 - 我应该选择dispatch_sync(dispatch_get_main_queue)
确保在选择器执行之前不会释放该对象。
问问题
49 次
2 回答
0
关于 Cocoa 内存管理系统的事情是你永远不必关心这个。内存管理完全是本地的——你从不关心其他函数做什么。基本规则是——调用者保证在函数被调用时对象参数是有效的,并且不保证其他任何事情。
如果一个函数以某种方式存储了一个对象以供以后使用,它必须(通过演绎)以某种方式保留它,因为它不再假定该对象是有效的。相反,作为函数的调用者,您不需要考虑函数的作用或它是否异步执行某些操作,因为您无法保证函数在调用后的任何时候其参数都处于活动状态。
于 2012-12-03T22:20:38.823 回答
0
块,GCD 调度捕获它们的上下文:在这种情况下,这意味着它们保留它们引用的所有内容,直到执行:)
于 2012-12-03T22:35:35.060 回答