Apple改变了他们的命名约定内存管理规则

时间:2011-04-04 03:03:27

标签: objective-c memory-management clang-static-analyzer

如之前的Cocoa Memory Management Rules所述

  

如果使用名称以“alloc”或“new”开头或包含“copy”(例如,alloc,newObject或mutableCopy)的方法创建对象,或者如果发送它,则获取对象的所有权保留信息。

自2010年12月以来没有读过,但自那时起已经改变为

  

使用名称以“alloc”,“new”,“copy”或“mutableCopy”开头的方法(例如,alloc,newObject或mutableCopy)“创建”对象。

请注意,现在需要将“copy”作为前缀。这导致Clang静态分析器发出一些与内存相关的警告:(。在搜索了互联网之后,我还没有得出结论,为什么这会改变,因为这是iOS内存管理的基础之一。

有人知道为什么吗?谢谢!

1 个答案:

答案 0 :(得分:6)

有些方法在其文本中包含“复制”,但显然不是复制方法。例如,+[NSData dataWithBytesNoCopy:length:]。当然,可以使用静态分析器的注释来告知非标准行为,但总的来说,我怀疑几乎没有人(自己除外)曾写过一个不以copy开头的复制方法或mutableCopy,所以他们决定简化一些事情。

我很高兴他们这样做,坦率地说,因为我遇到了相反的问题,其中一个方法包含“复制”一词,但并不打算返回一个拥有的参考文献。