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

LaN*_*LaN 5 memory-management objective-c 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内存管理的基础之一.

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

BJ *_*mer 6

有些方法在文本中包含"复制",但显然不是复制方法.例如,+[NSData dataWithBytesNoCopy:length:].这是当然的,可以使用注解静态分析来通知非标准行为,但总的来说,我怀疑,几乎没有人(自己除外)曾经写道,没下手拷贝的方法,copy或者mutableCopy,所以他们决定只是简化事情.

坦率地说,我很高兴,因为我遇到了相反的问题,其中一个方法包含"复制"一词,但并不打算返回一个拥有的参考.