我有點新的Objective-C,我不知道該代碼是正確的內存管理。正確的內存管理爲[字符串UTF8String]
const unsigned char * data =(const unsigned char *) [string UTF8String];
當我打電話給數據時,我得到一個錯誤。這次通話後我需要清理嗎?
我有點新的Objective-C,我不知道該代碼是正確的內存管理。正確的內存管理爲[字符串UTF8String]
const unsigned char * data =(const unsigned char *) [string UTF8String];
當我打電話給數據時,我得到一個錯誤。這次通話後我需要清理嗎?
編號「UTF8String」不包含單詞alloc
,copy
,retain
或create
。因此,您不對該內存負責。
請注意,如果您希望在發佈string
後仍然需要這些數據,則應將其複製;通過合同,你對該記憶沒有任何責任,但也不能保證它會超出賦予給你的對象的範圍。
你不需要free
它。
在Cocoa中,如果某個方法不包含單詞alloc
,init
或copy
,那麼您不擁有從該方法返回的對象。
-UTF8String
實際上點到您所呼叫它的NSString
對象的cstring
表示。當對象的狀態改變時,UTF8String
也會改變。
正如documentation中所述,它會以與自動釋放對象相同的方式自動釋放。
從技術上講,free()用於從堆中移除使用malloc()分配的內存。 malloc()未用於分配內存。請記住,objective-c帶有擴展名。 數據變量將保留在基於c語言'範圍'規則的內存中。
當NSString被釋放時,C字符串被釋放。 (或者物體的內部狀態改變。) – 2010-04-29 20:35:04
這是危險的建議。很多處理C指針的方法都需要你釋放內存。 alloc複製保留規則適用於對象。 – Chuck 2010-04-29 20:36:13
@Chuck:我已經添加了關於「創建」的註釋,它也會照顧Core Foundation對象。你能給出一個方法的例子,需要調用者釋放該規則未涉及的內存嗎? – 2010-04-29 20:37:40