2010-11-25 48 views
0

在下面的方法中,我不確定爲什麼釋放其中一個數組會導致異常。我可以看到的唯一原因是,如果componentsSeparatedByString返回一個自動發佈的數組,但我看不到文檔中提到它。NSString componentsSeparatedByString:是否返回autoreleased數組?

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

任何人都可以確認數組是否autoreleased?如果是這樣,我怎麼知道/爲什麼我應該知道?
是否有可能通過代碼檢查對象的任何一個實例是否是自動釋放的?

回答

-1

除非你專門分配內存,否則系統方法會給你一個自動釋放方法。

+0

-1 false。 「malloc」專門分配內存。 `copy`不保證返回一個新的對象。 `保留`不分配新的內存。然而在所有這些情況下,你都擁有記憶,必須放棄記憶。 – 2010-11-25 06:12:24

-1

按照慣例,所有名稱都是init或copy的方法都會返回非自動釋放對象。

+0

-1 false。它是`alloc`方法返回一個擁有對象,而不是`init`方法。 – 2010-11-25 06:08:21