我应该使用GCD dispatch_X保留参数(还是保留它)

时间:2012-11-29 09:32:07

标签: objective-c memory-management ios6 selector grand-central-dispatch

据我记得,我们有类似performSelectorOnMainThread:(和变体)的东西确实保留对象,直到方法完成执行“在Apple的文档中。那么我们可以依赖ios6中的这种行为吗?因为没有'现在NSObject Class Reference中的任何信息。如果我更喜欢使用GCD dispatch_async / sync,如果我在后台线程中创建了对象,那么同样的问题 - 我应该选择dispatch_sync(dispatch_get_main_queue)确保在选择器执行之前不会释放该对象。

2 个答案:

答案 0 :(得分:0)

关于Cocoa内存管理系统的事情是你永远不必关心这个。内存管理完全是本地的 - 您从不关心其他功能的作用。基本规则是 - 调用者保证在调用函数时对象参数有效,并且不保证其他任何内容

如果一个函数以某种方式存储一个对象以供以后使用,它必须(通过演绎)以某种方式保留它,因为它不会假定该对象有效。相反,作为函数的调用者,您不需要考虑函数的作用或者它是否异步执行某些操作,因为您不能保证函数在调用后的任何时刻都存活。

答案 1 :(得分:0)

块,GCD调度捕获其上下文:在这种情况下,这意味着它们会保留它们引用的所有内容,直到执行:)