我的以下代码是否包含内存泄漏? 请帮帮我!
NSMutableArray *arrInfo = [[NSMutableArray alloc] init];
appDelegate.arrAppInfo = arrInfo;
[arrInfo release];
答案 0 :(得分:4)
这取决于如何在appDelegate中定义arrAppInfo。
如果它是一个强大的引用,只要appDelegate在某个时候发布arrAppInfo就会很好。
@property (nonatomic, retain) NSMutableArray *arrAppInfo; //All good
如果它是弱引用,那么当您尝试访问arrAppInfo时会出现错误,因为它已被释放。
@property (nonatomic, assign) NSMutableArray *arrAppInfo; //Trouble
答案 1 :(得分:4)
如果属性arrAppInfo被声明为保留(或强)属性,那么您在非ARC环境中完全有效。事实上,ARC在类似情况下所做的只是在检测到当前作用域中不再使用arrInfo属性时放置一个版本。
深入研究:
NSMutableArray *arrInfo = [[NSMutableArray alloc] init]; //arrInfo retain count = 1
appDelegate.arrAppInfo = arrInfo; //arrInfo retain count = 2
[arrInfo release]; //arrInfo retain count = 1
如果在将arrInfo变量分配给保留属性后未释放它,则在重新分配或释放arrAppInfo属性时,将来会导致内存泄漏,因为其保留计数不会为0。