在下面的方法中,我不确定为什么释放其中一个数组会导致异常。我能看到的唯一原因是,如果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
}
任何人都可以确认数组是否已自动释放?如果是这样,我怎么知道/为什么我应该知道? 是否可以通过代码检查对象的任何一个实例是否自动释放?
答案 0 :(得分:11)
是的,因为方法的名称:
new
alloc
retain
copy
这通常称为“NARC”规则,在此完全解释:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1
答案 1 :(得分:-1)
除非你专门分配内存,否则系统方法会给你一个自动释放的方法。
答案 2 :(得分:-1)
按照惯例,所有名称中带有init或copy的方法都会返回非自动释放的对象。