假设你有一个 viewController:
@property (strong) object* A
@property (strong) object* B
然后你故意在某个时候创建一个保留周期,没有计时器,这样
self.A.someStrongProperty = self //retain cycle
问题:假设包含这些属性的 VC 被释放,保留周期或内存泄漏是否会持续存在?
假设你有一个 viewController:
@property (strong) object* A
@property (strong) object* B
然后你故意在某个时候创建一个保留周期,没有计时器,这样
self.A.someStrongProperty = self //retain cycle
问题:假设包含这些属性的 VC 被释放,保留周期或内存泄漏是否会持续存在?
在您上面发布的代码中,没有保留周期。
保留周期将是self.A = self;
或更有可能,self.A.someStrongProperty = self
.
编辑:在您在上面编辑的情况下,假设self
是一个视图控制器,由于保留周期,它不会释放。您应该将您的更改someStrongProperty
为一个weak
属性,这将阻止保留周期。
是的,如果您保留self
,您将导致保留周期。
这将导致self
实例不被释放,从而导致内存泄漏。
为了防止这种情况,您可以使用weak
属性或在某个时候手动设置someStrongProperty
为nil
,以打破保留周期。