如果我用[NSString StringWithFormat]創建一個字符串,是否必須[保留]它? 我的理解是,便利的方法將對象添加到自動釋放池。如果是這樣的話,我們不應該保留這個對象,以便它不會在事件循環結束時耗盡池中的內容。objective C NSString retain
1
A
回答
1
如果字符串應該持續超出當前函數,那麼是的,需要它的對象應該保留它。這裏是英語詞組似乎微不足道的地方之一,但實際上隱藏了一個關鍵概念。而不是說「我必須保留它嗎?」或者(正如我最初寫的那樣)「如果你想讓字符串保持,」用一個保留字符串的對象說話。不同之處在於後者表達了ownership的概念(注意:蘋果文檔在談到所有權時使用「你」,但它是第三人稱中性「你」而不是第二人稱「你」)。當然,如果您將字符串存儲在property中,則會爲您處理保留(或複製)。除非您需要定位舊版本的OS X(10.4和更早版本),否則您通常應該使用屬性。
標準集合擁有它們包含的對象,因此保留它們。當元素從集合中移除時,集合釋放元素(注意:它們不會自動釋放,因此如果對象沒有其他所有者,對象將被銷燬)。在「Validity of Shared Objects」中閱讀更多關於此主題的內容。蘋果公司的memory management文檔應該告訴你你需要知道的一切。
相關問題
- 1. obj-c NSString和alloc/retain/release
- 2. objective-c concatenate NSString
- 3. NSString indexOf Objective-C
- 4. Objective-C: - [NSString wordCount]
- 5. objective c retain,assign,copy getters setters方法
- 6. objective c NSString比較
- 7. NSObject到NSString Objective-C
- 8. NSString到char [] Objective-c
- 9. Objective C NSData到NSString
- 10. Objective-C的 - 的NSMutableString了setString VS的NSString
- 11. 的Objective-C的NSString問題
- 12. NSString的大小 - Objective C
- 13. 的Objective-C:的NSString枚舉
- 14. Objective-C NSString字符替換
- 15. NSString -initWithContentOfFile錯誤 - Objective-C
- 16. 的Objective-C的NSString問題
- 17. Objective-C:從NSString製作NSArray
- 18. Objective-c指針和NSString
- 19. Objective-C NSString參考類型
- 20. Objective-C NSString Autorelease問題
- 21. objective-c NSString stringwithformat的URL
- 22. $ _GET in Objective-C on NSString
- 23. Objective C - NSString - 內存基礎
- 24. Objective-C阻止NSString被釋放/ dealloc
- 25. Objective C「@property(nonatomic,retain)」的C++等價物是什麼?
- 26. C char *到Objective-C NSString(或NSData?)
- 27. Objective C繼承
- 28. 爲什麼我的NSString int在Objective C中是錯誤的?
- 29. @synthesize in Objective-c?
- 30. Evaulate NSString並執行Objective-C代碼
非常感謝outis。我是一個Java程序員,因此所有權等概念不自然流暢:) 另一個相關的問題,如果我創建一個NSArray(使用[new])的NSString,那麼,是否正確,我不需要保留NSString,因爲它現在歸屬於我所擁有的NSArray。因此,如果我保留/正確釋放我的NSArray,它所包含的NSStrings將始終由我隱式保留/釋放。 我們假設我需要NSArray及其成員NSStrings在整個應用程序生命週期中都可用。 – Amarsh 2010-04-05 00:53:18
@Amarsh:正確的關於NSArray。更新的答案提供了更多的細節。 – outis 2010-04-05 01:10:01
再次感謝outis。在同樣的背景下的另一個問題。 我添加一個對象如下: [someNSArray addObject:[SomeClass alloc]] and later,call: [someNSArray removeAllObjects] 在這種情況下,我的SomeClass對象會自行釋放嗎? 我的基本困惑是,在我們分配一個對象並將其添加到集合的情況下,誰是所有者,集合還是您或兩者? – Amarsh 2010-04-05 01:52:16