1

可能重复:
使用 Cocoa 和 Objective-C 理解引用计数

我对内存泄漏有点困惑 - 当我必须释放对象时,以及它何时会在 iOS 中自动释放,所以请使用以下代码帮助我理解。我有一种带有以下while块的方法:

-(void) oneMethod {
    NSMutableArray *returnValue = [[[NSMutableArray alloc] init] autorelease];

    while(true) { 
    ...
     MyObject *myObj = [[MyObject alloc] initWithFrequency:100];

    [returnValue addObject:myObj];

    [myObj release];
    ...
    }
}
  1. 我是否必须调用 [myObj release] 或者它将在每个循环中自动释放?
  2. 另外,我是否必须将 autorelease 放在 NSMutableArray 初始化调用中,或者它会在我从方法返回后立即自动释放?

谢谢!

4

3 回答 3

1

您应该使用ARC - 自动引用计数,然后您就不必担心释放分配的对象。

于 2012-12-03T14:54:04.177 回答
1

越早,我学到的东西就越好。您的示例是在插入数组后适当地释放每个 myObj 变量。数组现在“拥有”对象,只要数组存在,对象就会存在,没有理由保留变量引用。

ARC 似乎确实让这一切变得完全没有必要。我想知道有多少开发人员会在不久的将来学习这个概念,因为 ARC 现在已经为您完成了这一切。

据推测,您没有使用 ARC,因此,如果您没有调用 [myObj release],每次循环都会导致泄漏。

于 2012-12-03T15:33:11.803 回答
1

你的代码是正确的。

我发现当你更多地使用它时,你会习惯它。我不会花太多时间去想它。

通常,您需要发布您制作的所有内容(或自动发布)。

您的循环编码正确,因为它易于记忆,即使对于大型数组也是如此。

于 2012-12-03T15:14:58.423 回答