开发者

Does NSString componentsSeparatedByString: return autoreleased array?

In the following method, I'm unsure of why releasing one of the arrays leads to an exception. The only reason that I could see, would be if componentsSeparatedByString returns an autoreleased array, but I can't see that the documentation mentions that it do.

-(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
}

Can anyone confirm if the array is autoreleased? If so, how can I know/why should I have known?

Is it possible to check if any one instance of an object is autoreleased or not by code?


Yes, because the name of the method:

  • does not start with new
  • does not start with alloc
  • is not retain
  • does not contain copy

This is commonly known as the "NARC" rule, and is fully explained here: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1


unless you specifically allocate memory, a system method will give you back an autoreleased method.


By convention all methods with init or copy in their names return non-autoreleased objects.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜