为什么UITableView的委托属性的属性不弱

工藤CC

我在UITableView的头文件中发现了这一点,尽管我的项目使用的是ARC,但几乎每个属性都是非弧形的。

@property (nonatomic, assign)   id <UITableViewDataSource> dataSource;
@property (nonatomic, assign)   id <UITableViewDelegate>   delegate;

为什么Apple不使用weakproperty而不是property assign,它是非弧形的向后兼容性吗?如果是这样,为什么不使用它__has_feature(objc_arc)来区分ARC和非ARC。

#if __has_feature(objc_arc)
@property (nonatomic, weak)   id <UITableViewDataSource> dataSource;
@property (nonatomic, weak)   id <UITableViewDelegate>   delegate;
#else
@property (nonatomic, assign)   id <UITableViewDataSource> dataSource;
@property (nonatomic, assign)   id <UITableViewDelegate>   delegate;
#endif

我希望delegate它很弱,所以当委托实例被释放时,我不需要将委托设置为nil。

谢谢你的帮助。

编辑:

我注意到这__has_feature(objc_arc)是错误的,因为当我的部署目标是4.3时我可以使用ARC,但是之后我就不能使用weak因此,条件应该是我的部署目标是否等于或大于5.0。

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0
@property (nonatomic, weak)   id <UITableViewDataSource> dataSource;
@property (nonatomic, weak)   id <UITableViewDelegate>   delegate;
#else
@property (nonatomic, assign)   id <UITableViewDataSource> dataSource;
@property (nonatomic, assign)   id <UITableViewDelegate>   delegate;
#endif
侯赛因·沙伯(Hussain Shabbir)

为什么苹果不使用weak property而不是分配,这是非弧形的向后兼容性吗?

我进行了一些研究,发现__weak是“赋值”修饰符的同义词。但是唯一的区别是在分配时,委托实例在释放时不会设置为nil。通常,您对IBOutlets和委托使用Assign修饰符。在ARC下,此值将替换为__weak。但是,有一个警告。__weak要求您在支持零弱引用的运行时上部署应用程序。这包括> =(iOS 5和Lion)。Snow Leopard或iOS 4及更早版本的操作系统不支持归零弱引用。显然,这意味着如果计划部署到较早的操作系统,则不能使用__weak所有权修饰符。所以是的,在这种敏感性下,它是非弧形的向后兼容性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

委托属性有什么特殊含义吗?

为什么通常给Objective-C委托赋予属性而不是保留?

为什么应用程序委托应该为其他viewController中使用的属性创建实例?

为什么不使用Swift在Swift中使用委托来设置属性值

为什么我不能在Swift项目中访问视图控制器的委托属性?

迅速。为什么UITableView委托不起作用?

绑定或委托属性

委托UIApplication的属性

UITableView spacerEffect属性的用途是什么?

有什么方法可以委托打字稿中的index属性?

为什么KO属性被分割?

为什么需要 [FromQuery] 属性?

将属性委托给 Django 中 OneToOneField 的属性

快速确定委托属性的类

在方法之间共享委托属性

通过委托更改控件的属性

为什么在定义委托时出现错误“无法使用手动引用计数来合成文件中的弱属性”?

为什么来自 JavaScript 的“innerHTML”属性不能是 HTML 属性?

为什么命名元组属性被类属性遮蔽?

在Python中,为什么属性优先于实例属性?

为什么在Python中使用属性类属性?

为什么Polymer的计算属性需要显式属性参数?

Python | 为什么访问实例属性比本地属性慢?

为什么无法为计算属性定义属性观察器?

为什么keyof产生属性的并集而不是属性的交集?

为什么属性必须是Python中的类属性?

为什么将变量用于html属性?

多处理抛出属性错误,为什么?

为什么 sequelize 忽略了references 属性?