![]() |
1
2
我不明白。是什么让你觉得你需要担心保留计数?retain计数是一个实现细节,忘掉它吧。你所需要担心的就是你是否拥有一件物品。
在几乎所有情况下,在分配实例变量时都希望保留或复制。主要的例外是保留周期。有时,您会发现自己处于这样一种情况:对象a引用对象B,对象B引用对象a。如果A保留了B,而B保留了A,则不能依赖dealloc中释放引用的正常模式使它们消失。在这种情况下,通常指定一个对象为所有者,另一个对象为所有者。拥有的对象将不会保留对所有者的引用。
委托是一种非常常见的模式,对象的所有者将自己设置为对象的委托。例如,表视图的控制器通常也是表视图的数据源和/或委托。如果表视图保留了委托,则会有一个保留周期(因为控制器已经保留了视图)。这就是为什么会出现“代表不留任”的大会。 如果要引用的对象实现了NSCopying,并且在拥有所有权的情况下不需要更改它,则绝对应该进行复制。Cocoa的一个例子是NSDictionary中元素的键。如果字典里的钥匙换了,那将是一场灾难。所以字典会复制它的键。
很简单:遵循 Cocoa memory management rules . 如果某个东西在你持有对它的引用时消失了,那么你并不拥有那个东西。如果需要比当前方法的作用域更久的东西,应该保留它。 |
![]() |
2
10
对于要执行以下操作的类类型对象:
至于清理,所有
问题不是它是否是在类的方法中创建的,而是您是否:
如果您还不拥有它,并且希望对它进行强引用,请保留-对于传递到方法中的实例也是如此。通过setter显式或隐式地保留并不重要。 |
![]() |
TheKing · 为什么数组的地址可以有负值? 2 年前 |
![]() |
yurnero · MATLAB:“加载”一个快速访问功能 6 年前 |
![]() |
joe · 一页可以同时在两个工作集中吗? 6 年前 |
![]() |
Jaques · “.exe”已触发断点 6 年前 |
![]() |
adn bps · 在函数中修改变量的高效内存方法 6 年前 |
![]() |
Gauraang Khurana · C语言中分段错误的不稳定行为 6 年前 |
![]() |
Rajesh K · 如何查找设备中存在的广告垃圾? 6 年前 |