沒有ARC,我可以使用自動釋放的陣列如下圖所示如何從ARC中的函數返回對象?
//-(NSMutableArray *)getObjects
-(NSMutableArray *)retrieveObjects
{
NSMutableArray *aArray = [[NSMutableArray alloc] init];
// add objects
return [aArray autorelease];
}
如何實現ARC一樣嗎?
沒有ARC,我可以使用自動釋放的陣列如下圖所示如何從ARC中的函數返回對象?
//-(NSMutableArray *)getObjects
-(NSMutableArray *)retrieveObjects
{
NSMutableArray *aArray = [[NSMutableArray alloc] init];
// add objects
return [aArray autorelease];
}
如何實現ARC一樣嗎?
根據蘋果的Advance Memory Management Programming Guide
在自動引用計數,或ARC,該系統使用相同的引用計數系統MRR,但它插入適當的內存管理方法會在編譯時調用。強烈建議您將ARC用於新項目。如果使用ARC,通常不需要理解本文檔中描述的底層實現,儘管它在某些情況下可能會有所幫助。
通常,您不需要使用retain,release或autorelease方法。系統會爲你做。但是,您需要小心不要執行保留循環;如果你這樣做,那些對象將永遠不會被釋放。
您不要autorelease
該對象。
不要做任何事情。 ARC會自動將陣列自動釋放,因爲您的方法被命名爲getObjects
,而不是被命名爲allocObjects
或copyObjects
或newObjects
。
閱讀「Retained return values」和「Unretained return values」在clang的文檔中的詳細信息。
您不必自動釋放該對象。 ARC會照顧它。但是,如果沒有任何內容強烈引用getObjects
方法中的返回對象,它將立即發佈。
array = [self getObjects] // array should be a strong variable
就像是:
-(NSMutableArray *)getObjects
{
NSMutableArray *aArray = [NSMutableArray alloc] init];
// add objects
return aArray;
}
請注意,根據Cocoa的命名約定,當它們通過輸出參數返回值時,應該只使用以'get'開頭的方法名稱。請參閱https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html – 2013-06-26 08:29:37