我已经开始用Xcode4.2开发我的第一个iOS应用程序,目标是使用"实用程序"模板(Flipside ViewController附带的模板)来开发iOS5.0.

我读到,由于ARC是一个编译时功能,它也应该与iOS 4兼容,所以我try 将我的应用程序定位到4.3,并try 编译它.当我这样做时,我会出现以下错误:

FlipsideViewController.m: error: Automatic Reference Counting Issue: The current deployment target does not support automated __weak references

它引用的是此行:

@synthesize delegate = _delegate;

该变量声明为:

@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;

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

推荐答案

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

这样做是为了避免保留循环,我在回答here中提到了这一点.您不希望有一个指向某个对象的强指针,而该对象可能有一个指向原始对象的强指针.这样就不会有任何东西被适当地释放.

Ios相关问答推荐

Jenkins node 无法运行fastlane命令-未找到命令

以编程方式更改VC&39;S导航栏按钮的属性,以响应另一个VC中的按钮按下

iOS 17-在Xcode 15中添加导航控制器时,导航栏不会立即显示

Flutter应用内购买无法恢复购买

iOS应用启动时崩溃问题解决方法-NO_CRASH_STACK-DYLD 4个符号丢失

动画文本位置

核心媒体基础知识,了解 CMSampleBuffer、CMBlockBuffer 和 CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer

Swift Combine:prepend() before share() 阻止初始接收器执行

渲染的海边重定向在物理 iOS 设备上不起作用

iOS swift从另一个数组中删除一个数组的元素

Got Unrecognized selector -replacementObjectForKeyedArchiver: 在 Swift 中实现 NSCoding 时崩溃

不变违规:应用程序 AwesomeProject 尚未注册使用静态 jsbundle 为 iOS 设备构建时

通过 segue 传递数据

导航控制器自定义过渡动画

由于 NSInvalidUnarchiveOperationException 导致 iOS11 WKWebview 崩溃

iOS 7 及更高版本: for each 视图控制器设置状态栏样式

检测应用程序何时进入我的视图背景的最佳方法是什么?

在 iOS 7 中更改返回按钮会禁用滑动导航返回

如何为 NSDate 添加一个月?

我的应用程序因使用广告支持框架而被拒绝.哪个图书馆负责?