5

如之前的Cocoa 内存管理规则中所述

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

2010 年 12 月之后没有读过它,但从那时起已经更改为

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

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

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

4

1 回答 1

6

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

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

于 2011-04-04T03:07:52.707 回答