比如:
ClassA* objA = [[[ClassA alloc] init] autorelease];
objA.myBlock = ^{
[self doSomething];
};
self.objA = objA;
就会导致self无法释放。。
只能 __weak MyClass* weakSelf = self;
然后objA.myBlock中: [weakSelf doSomething];
这种问题大家有什么经验避免吗??这个很难发现呀。
没错,这个很难发现的。。。。只能遵守规则。而且有些地方该用回调的还是用回调的好。
另外,开了ARC之后,出现retain circle的地方会给出warning的。
解决方案就是:传递NSObject的时候一定要在心里过一遍谁拥有谁,千万别以为开了ARC就不用内存管理了,引用计数和自动GC是有本质区别的。
另一个解决方案就是学C++,所谓不会C++的Obj-C程序员不是一个好C程序员