将分配的对象分配给某个未分配的对象会导致内存泄漏吗?

时间:2014-01-17 09:09:11

标签: ios objective-c memory-leaks

我的以下代码是否包含内存泄漏? 请帮帮我!

NSMutableArray *arrInfo =  [[NSMutableArray alloc] init];
appDelegate.arrAppInfo = arrInfo;
[arrInfo release];

2 个答案:

答案 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。