如果我用[NSString StringWithFormat]创建一个String,我是否必须[保留]它? 我的理解是方便方法将对象添加到自动释放池。如果是这种情况,我们是否应该保留该对象,以便在事件循环结束时不会将池耗尽?
答案 0 :(得分:1)
如果字符串应该超出当前函数,那么是,需要它的对象应该保留它。这里是英语短语似乎微不足道但却隐藏着一个关键概念的地方之一。而不是说“我必须保留它吗?”或者(正如我最初写的那样)“如果你想让字符串保持不变,”就保留字符串的对象进行讨论。不同之处在于后者表达了ownership的概念(注意:Apple文档在谈论所有权时使用“你”,但它是第三人称中性“你”而不是第二人称“你”)。当然,如果您将字符串存储在property中,则会为您处理保留(或复制)。除非您需要定位旧版本的OS X(10.4及更早版本),否则通常应该使用属性。
标准集合拥有它们包含的对象,因此保留它们。从集合中删除元素时,该集合会释放该元素(注意:它们不会自动释放,因此如果该对象没有其他所有者,则该对象将被销毁)。在“Validity of Shared Objects”中阅读有关此主题的更多信息。 Apple的memory management文档应该告诉您需要知道的一切。