2012-08-05 37 views
3

可能重複:
In which situations do we need to write the __autoreleasing ownership qualifier under ARC?的Xcode在__autorelease時,把有**在接口

使得在接口這個方法:

- (NSArray *)questionsFromJSON:(NSString *)jsonString 
        withError:(NSError **)error; 

Tab鍵進行自動完成時在實施中它增加了這個:

- (NSArray *)questionsFromJSON:(NSString *)jsonString withError:(NSError *__autoreleasing *)error 

我想到了ARC,從來沒有必要使用autorelease,但我猜這是不同的,因爲它用ARC編譯得很好。

只是好奇:)

回答

1

自動釋放在ARC中使用了很多。你只是看不到關鍵字遍佈整個地方。

比如你的網站,就是當你發送一個指向對象的指針,就像典型的錯誤情景......

NSError *error = nil; if (![foo bar:&error]) { 
    // handle error 
} 

注意,該欄方法將做這樣的事情......

- (void)bar:(NSError **errorPtr) { 
    // blah... 
    if (an_error_happened) { 
     NSError *error = [NSError muckityMuck]; 
     *errorPtr = error; 
    } 
} 

現在,錯誤對象已被分配,並且像函數調用中的autorelease一樣「返回」。當你聲明函數/方法採取「**」時,你隱含地聲明__autorelease。

相關問題