我可以在ARC中使用保留吗?

我可以在ARC中使用保留吗?

问题描述:

我正在阅读这份官方指南:https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW13,我不确定它是指旧的处理引用计数的方式还是仅用于演示它的工作原理 - 但是应该如何使用保留/手动释放?我可以在ARC中使用保留吗?

+1

如果您是ARC的新手,那么您应该查看[“过渡到ARC发行说明”](https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/简介/ Introduction.html)。 –

+0

是的,我知道,只是不确定在官方文档(教育或现实生活)中说明这一点的目的,但感谢您的链接,将看看:) – raistlin

您不得与ARC一起使用retain。但是,在没有ARC的情况下(以及您链接的文档中所述),它在后台仍然是相同的,但编译器会根据需要添加retainrelease调用。你不必处理。

这二传手:

- (void)setCount:(NSNumber *)newCount { 
    [newCount retain]; 
    [_count release]; 
    // Make the new assignment. 
    _count = newCount; 
} 

应该是这样的,使用ARC时:

- (void)setCount:(NSNumber *)newCount { 
    // Make the new assignment. 
    _count = newCount; 
} 
+3

+1要清楚,@raistlin,Apple不建议你写这段代码(因为99%的时间,你使用自动合成的访问器方法),但只是向你展示它的功能。从这个角度来看,看到等效的非ARC代码的作用是比ARC代码更能说明背后发生的事情。 – Rob

+1

是的。如果您想在属性更改时执行某些操作,则只需手动实现一个setter即可。例如重新绘制视图或重新加载表。 – DrummerB

+0

感谢球员,我很担心那里一秒钟;) – raistlin

您不要使用与ARC保留,但 它可以禁用ARC由单个文件为这些文件添加-fno-objc-arc编译器标志。

您在目标 - >构建阶段 - >编译源中添加编译器标志。您必须双击Compiler Flags下的右列。您也可以在按住CMD按钮选择文件,然后按下回车弹出标志的文本框中添加多个文件。 enter image description here

+0

是的,我知道我可以禁用ARC的某些文件。我只是好奇 - 尽管在官方指南中提及ARC的说明 - 它仅在教育或实际使用目的的Apple文档中提供 – raistlin