我在读文章与有关ARC.Following是部分:
ARC还充分利用到了Objective-C语言的命名约定并推断返回的对象的所有权。 在Objective-C,一种方法,用下面的前缀中的任何一个统计
- ALLOC,
- 复制,
- mutableCopy
- 新
被认为是转移返回对象的所有权给调用者。 这意味着,在您的应用程序,当你创建一个方法,ARC自动推断是否返回一个自动释放的对象或从你的方法名+1保留的对象。 然而,有一个>小的警告。 让我们假设你有一个与“复制”开头的方法,如
- (的NSString *)copyRightString;
ARC假定它会返回字符串的所有权转移给调用者,并自动插入释放。 一切正常,如果同时被调用方法和调用的方法使用ARC编译。
但是,如果你的“copyRightString”的方法是在不与ARC编译的第三方库,你会过度释放返回的字符串。 这是因为,调用代码,ARC编译器插入释放,以平衡由“复制”的方法颠簸保留计数。
相反,如果第三方库编译与ARC和你的方法是不是,你将有一个内存泄漏。
现在,我有两个问题:1.为什么对象是过度释放时“copyRightString”的方法是在不与ARC编译的第三方库由于方法名以开始复制,因此该方法不会释放,因为它的对象?在调用方法来释放它,因为方法的名称与副本开始ARC将照顾对象的责任。
2.为什么会出现内存泄漏如果第三方库的编译与ARC,我们的方法是不是?因为方法的名称与副本开始,这样ARC不会释放它,它是调用方法来释放it.and在我们的责任代码我们将发布它,因为那么方法名称开头的副本。
我希望我清楚!