首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用ARC和以iOS 4.0为目标时替换弱引用?

如何在使用ARC和以iOS 4.0为目标时替换弱引用?
EN

Stack Overflow用户
提问于 2011-07-31 23:31:35
回答 3查看 49.9K关注 0票数 86

我已经开始用Xcode 4.2开发我的第一个iOS应用程序,并使用一个“实用程序”模板(随FlipsideViewController附带的模板)将iOS 5.0作为目标。

我读到,由于ARC是一个编译时特性,它也应该与iOS 4兼容,所以我尝试将我的应用程序定位为4.3,并尝试编译它。当我这样做时,我会得到以下错误:

Counting ViewController.m:错误:自动参考计数问题:当前部署目标不支持自动__weak引用

它指的是这一行:

代码语言:javascript
复制
@synthesize delegate = _delegate;

该变量声明为:

代码语言:javascript
复制
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;

我理解在iOS 4中不支持“弱引用”,但我真的不明白为什么我一开始就想使用弱引用,也不知道如何重写东西以避免使用它,同时仍然利用iOS 4和5(毕竟,它应该与iOS 4和5一起工作)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-05 17:41:59

要针对旧操作系统,您可以在属性声明中使用unsafe_unretained而不是weak,并且它的工作方式应该大致相同。当目标消失时,weak引用本身为零,但unsafe_unretained留下了一个可能性,即当您正在链接的对象被释放时,它可能会变成一个悬空指针。后者的行为与您在手动内存管理中使用assign作为属性声明的行为相同。

这样做是为了避免保留周期,我在回答here时提到了这一点。您不希望有一个强指针指向可能有强指针返回到原始对象的东西。那么什么都不会得到适当的释放。

票数 149
EN

Stack Overflow用户

发布于 2011-08-29 02:48:21

如果只使用弱引用来增加安全性,那么如果新的运行时函数可用,就手动调用它们,如果没有,则手动调用__unsafe_unretained变量的简单赋值。

ZWRCompatibility.h将在一定程度上简化这一点。

票数 11
EN

Stack Overflow用户

发布于 2012-06-28 20:58:30

感谢Mike的兼容性库PLWeakCompatibilty,您现在也可以在iOS 4.x上使用__weak。

它非常容易配置,并且不需要在5.x上进行额外的考虑或工作。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6893038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档