如何在使用ARC并定位iOS 4.0时replace弱引用?
我已经开始使用Xcode 4.2开发我的第一个iOS应用程序,并且使用“实用程序应用程序”模板(带有FlipsideViewController的模板)来定位iOS 5.0。
我读过,因为ARC是一个编译时function,所以它应该与iOS 4兼容,所以我试图将我的应用程序定位到4.3,并尝试编译它。 当我这样做,我得到这个错误:
FlipsideViewController.m:错误:自动引用计数问题:当前部署目标不支持自动__weak引用
这是引用这一行:
@synthesize delegate = _delegate;
该variables被声明为:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
我明白iOS 4不支持“弱引用”,但是我不明白为什么我想用弱引用开始,也不知道如何重写某些东西以避免使用它,而仍然利用ARC(毕竟,它应该与iOS 4和5的工作吗?)
要定位较旧的操作系统,您可以在您的属性声明中使用unsafe_unretained
而不是weak
,并且它应该以相同的方式工作。 当它们的目标消失时, weak
引用会自己消失,但是unsafe_unretained
会打开这个链接的对象在释放时可能变成悬挂指针的可能性。 后者与您在手动内存pipe理中使用assign
作为属性声明的行为相同。
你这样做是为了避免保留周期,我在这里提到我的答案。 你不想有一个强有力的指针指向可能有一个强指针返回到原始对象的东西。 那么什么都不会得到正确的发布
如果仅使用弱引用来提高安全性,则手动调用新的运行时函数(如果可用),并且如果不是则返回简单分配__unsafe_unretained
variables。
ZWRCompatibility.h会稍微简化一下。
感谢Mike Ash的兼容库PLWeakCompatibilty ,您现在可以简单地在iOS 4.x上使用__weak。
configuration起来非常简单,不需要额外的考虑和努力。