[英]NSString and Objective-C Memory Management ARC
在編寫Objective-C項目時,我有些困惑。 ARC已打開。 這是一個示例代碼:
NSString *foo = [[NSString alloc] initWithUTF8String:"This is a C string."];
// Use foo here...
foo = @"This is an ObjC string."
這是我的問題:
我是否需要在initWithUTF8String:
方法中以'\\ 0'顯式終止C字符串,還是可以省略NULL終止符?
當我將foo
用作指針並為其分配新的Objective-C字符串時,是否存在任何內存泄漏? 為什么?
如果我將NSString
更改為其他類,例如NSObject
或自己的類,問題2有什么區別嗎? (初始化一個對象,然后直接將其他值重新分配給它。)
謝謝!
以null終止符結尾的字符串文字是否包含額外的null終止符?
沒有內存泄漏。 配置了ARC的編譯器將生成代碼,以在分配新字符串之前釋放被引用的第一個字符串。
沒變。 如果類型不兼容,則可能會收到編譯時警告。
對於第一個問題,Apple的官方文檔告訴我的是:
返回一個字符串,該字符串是通過從給定的UTF8編碼字節的C數組復制數據而創建的。
- (id)stringWithUTF8String:(const char *)bytes參數bytes一個以NULL終止的C字節數組,采用UTF8編碼。
但是由於字符串文字默認情況下為NULL終止(如@TomSwift指出的那樣),可以省略它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.