我應該發佈strPhone嗎?那麼coreFoundation對象被轉換爲NSString呢?它會發生什麼?我應該釋放這個嗎? Objective-C中的內存管理
strPhone = [[NSString alloc] initWithUTF8String: [[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String]];
謝謝你幫助我理解。
我應該發佈strPhone嗎?那麼coreFoundation對象被轉換爲NSString呢?它會發生什麼?我應該釋放這個嗎? Objective-C中的內存管理
strPhone = [[NSString alloc] initWithUTF8String: [[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String]];
謝謝你幫助我理解。
你應該釋放或autorelease兩者。對於NSString,任何時候使用alloc + init創建一個對象的時候,你都將它的引用計數設置爲1.你負責在完成時釋放它或者立即自動釋放它,以允許它在運行循環結束時釋放。
對於CFObject,ABMultiValueCopyArrayOfAllValues返回一個CFArray,它是NSArray的「免費橋接」(意味着它可以與NSArray交替使用)。任何時候拷貝完成 - 就像方法名所暗示的那樣,你有責任釋放返回的對象。同樣,您可以在完成之後立即釋放它,或者立即自動釋放它,以便在運行循環完成時釋放它。
是的,兩者。請參閱Apple's memory management guide瞭解可可中內存管理的完整但仍相當簡短的概要。
記住你的內存管理的NARC。
新建,分配,保留,複製。這些是創建您負責釋放的對象的方法。除了這四種方法之外,你得到的任何新對象都是自動釋放的,你不必顯式處理它的釋放。
不要擔心引用次數。如果通過顯式分配('alloc' /'Create')或通過複製另一個對象來創建對象,則您擁有它。無論你擁有什麼,你都必須釋放。內存管理編程指南最近被重寫了這些行:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt在這種情況下,CF版本也是相關的:http://開發人員。 apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/ – 2010-09-03 16:56:38