如果我用[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. NSString indexOf Objective-C
- 3. Objective-C: - [NSString wordCount]
- 4. NSString到char [] Objective-c
- 5. objective c NSString比较
- 6. NSObject到NSString Objective-C
- 7. Objective C NSData到NSString
- 8. Objective-C NSString参考类型
- 9. Objective-c指针和NSString
- 10. objective-c NSString stringwithformat的URL
- 11. 的Objective-C的NSString问题
- 12. Objective-C NSString Autorelease问题
- 13. Objective-C NSString字符替换
- 14. 的Objective-C的NSString问题
- 15. NSString -initWithContentOfFile错误 - Objective-C
- 16. 的Objective-C:的NSString枚举
- 17. Objective-C阻止NSString被释放/ dealloc
- 18. Objective C“@property(nonatomic,retain)”的C++等价物是什么?
- 19. C char *到Objective-C NSString(或NSData?)
- 20. @synthesize in Objective-c?
- 21. 合并5个NSString的Objective-C中
- 22. Objective C常量用法NSString * const
- 23. 的NSString和Objective-C内存管理ARC
- 24. 的Objective-C:拔值超出的NSString
- 25. 来自NSString的Objective-C标识符
- 26. 格式化的NSString在Objective-C
- 27. 比较Objective-C常量字符与NSString
- 28. 的NSString保留计数在Objective-C
- 29. 创建Objective-C文字对象,如NSString
- 30. Objective-C NSString用于循环的characterAtIndex
非常感谢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