如之前的Cocoa Memory Management Rules所述
如果使用名称以“alloc”或“new”开头或包含“copy”(例如,alloc,newObject或mutableCopy)的方法创建对象,或者如果发送它,则获取对象的所有权保留信息。
自2010年12月以来没有读过,但自那时起已经改变为
使用名称以“alloc”,“new”,“copy”或“mutableCopy”开头的方法(例如,alloc,newObject或mutableCopy)“创建”对象。
请注意,现在需要将“copy”作为前缀。这导致Clang静态分析器发出一些与内存相关的警告:(。在搜索了互联网之后,我还没有得出结论,为什么这会改变,因为这是iOS内存管理的基础之一。
有人知道为什么吗?谢谢!
答案 0 :(得分:6)
有些方法在其文本中包含“复制”,但显然不是复制方法。例如,+[NSData dataWithBytesNoCopy:length:]
。当然,可以使用静态分析器的注释来告知非标准行为,但总的来说,我怀疑几乎没有人(自己除外)曾写过一个不以copy
开头的复制方法或mutableCopy
,所以他们决定简化一些事情。
我很高兴他们这样做,坦率地说,因为我遇到了相反的问题,其中一个方法包含“复制”一词,但并不打算返回一个拥有的参考文献。