我已经开始用Xcode 4.2开发我的第一个iOS应用程序,并使用一个“实用程序”模板(随FlipsideViewController附带的模板)将iOS 5.0作为目标。
我读到,由于ARC是一个编译时特性,它也应该与iOS 4兼容,所以我尝试将我的应用程序定位为4.3,并尝试编译它。当我这样做时,我会得到以下错误:
Counting ViewController.m:错误:自动参考计数问题:当前部署目标不支持自动__weak引用
它指的是这一行:
@synthesize delegate = _delegate;该变量声明为:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;我理解在iOS 4中不支持“弱引用”,但我真的不明白为什么我一开始就想使用弱引用,也不知道如何重写东西以避免使用它,同时仍然利用iOS 4和5(毕竟,它应该与iOS 4和5一起工作)?
发布于 2011-08-05 17:41:59
要针对旧操作系统,您可以在属性声明中使用unsafe_unretained而不是weak,并且它的工作方式应该大致相同。当目标消失时,weak引用本身为零,但unsafe_unretained留下了一个可能性,即当您正在链接的对象被释放时,它可能会变成一个悬空指针。后者的行为与您在手动内存管理中使用assign作为属性声明的行为相同。
这样做是为了避免保留周期,我在回答here时提到了这一点。您不希望有一个强指针指向可能有强指针返回到原始对象的东西。那么什么都不会得到适当的释放。
发布于 2011-08-29 02:48:21
如果只使用弱引用来增加安全性,那么如果新的运行时函数可用,就手动调用它们,如果没有,则手动调用__unsafe_unretained变量的简单赋值。
ZWRCompatibility.h将在一定程度上简化这一点。
发布于 2012-06-28 20:58:30
感谢Mike的兼容性库PLWeakCompatibilty,您现在也可以在iOS 4.x上使用__weak。
它非常容易配置,并且不需要在5.x上进行额外的考虑或工作。
https://stackoverflow.com/questions/6893038
复制相似问题