1

在以下方法中,我不确定为什么释放其中一个数组会导致异常。我能看到的唯一原因是如果componentsSeparatedByString返回一个自动释放的数组,但我看不到文档提到它确实如此。

-(void)addRow:(NSString *)stringWithNumbers;
{

    NSArray *numbers = [stringWithNumbers componentsSeparatedByString:@" "];
    NSMutableArray *row = [[NSMutableArray alloc] initWithCapacity:[numbers count]];
    for (NSString *number in numbers) {
        Number *n = [[Number alloc] initWithNumber:number];
        [row addObject:n];
        [n release];
    }
    [rows addObject:row];
    [row release];
//    [numbers release];  <-- leads to exception
}

谁能确认阵列是否自动释放?如果是这样,我怎么知道/为什么我应该知道?
是否可以通过代码检查对象的任何一个实例是否自动释放?

4

3 回答 3

12

是的,因为方法的名称:

  • 不以new
  • 不以alloc
  • 不是retain
  • 不含copy

这通常称为“NARC”规则,并在此处进行了全面解释:http: //developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc /uid/20000043-SW1

于 2010-11-25T06:05:10.757 回答
-1

除非您专门分配内存,否则系统方法会给您返回一个自动释放的方法。

于 2010-11-25T06:01:24.053 回答
-1

按照惯例,所有名称中带有 init 或 copy 的方法都返回非自动释放的对象。

于 2010-11-25T06:01:46.643 回答