【发布时间】:2015-08-12 02:42:24
【问题描述】:
这是每个人都熟悉的非常常见的问题,但我仍然没有完全理解它。
如果对象A拥有对象B(具有强属性),而对象B具有对象A的强属性,则存在retain循环,无法释放对象,存在内存泄漏。
但是,如果对象 A 将指向对象 C 而不是对象 B,那么内存中的另一个地址呢?
据我所知,强属性的作用如下:
- (void)setObject:(id)newObject{
if (_newObject == newObject){
return; //
}
NSObject *oldObject = _newObject;
_newObject = [newObject retain];
[oldObject release];
}
那么,如果我们指向对象 C,那么对象 B 的内存不是会被释放吗?如果两个对象(A 和 B)都改为设置 nil 对象怎么办?是否还会存在内存泄漏的保留周期?旧值“浮动”在内存中的某处?
我知道,这已经讨论过很多次了,但我仍然无法在脑海中获得“全貌”。对此问题的任何澄清,我将不胜感激。
【问题讨论】:
-
分配工具具有帮助检测周期的工具。我建议您探索上述工具。如果您想编写示例代码来玩,请创建自己的
NSObject子类,这样您就不会遇到静态实例(如 @"foo")或标记指针。
标签: ios objective-c memory-management memory-leaks retaincount