use*_*ser 1 properties objective-c
到目前为止,我认为@property指令生成了一个..alloc] init]
相应对象的getter,现在我不明白为什么这不是语言的一部分.更糟糕的是 - 访问nil属性时也不例外.
我觉得在我的推理中某处存在误解,但我不知道在哪里.我想知道为什么将自动惰性实例化器作为属性的一部分对于Cocoa开发中的几乎所有情况都不是理想的.
属性是Objective-C的一个相当新的特性.大量现有代码假定ivars初始化为0,因此对象getter起始为nil
.构建属性的实现是为了实现大多数人手工编写的相同类型的访问器(或者使用像Accessorizer这样的工具).大多数人并没有手工创建懒惰的吸气剂,所以属性也没有以这种方式实现.这是一个专门的问题,而不是常见的需求.
(旁注:我的声明在某种程度上暗示atomic
了默认情况,这不是最常用的手工编写访问器的方法.但它与编写访问器的常用方法兼容,只是速度慢,有些人做了经常写原子访问器.懒惰不兼容.)
在许多情况下,您根本不需要此行为.我不希望-image
属性自动生成空UIImage
.nil
如果没有分配,我宁愿回去.在许多情况下,"空"和"空"之间存在显着差异nil
.一个nil
标题可能意味着"使用默认",而@""
可能意味着"是空的." 这是一种非常常见的模式.我不经常写懒惰访问器(但部分是因为这样做很麻烦.)
有几个类init
不是指定的初始化程序,甚至可能不是一个合理的(甚至合法的)初始化程序.
但它可能是属性的有用选项,例如:
@property (nonatomic, lazy, readwrite, strong) NSMutableArray *stuff;
Run Code Online (Sandbox Code Playgroud)
如果你发现它通常很有用,你应该在bugreport.apple.com上打开一个雷达.
关于nil
在ObjC中传达信息是合法的事实,这可以追溯到最开始.通常它非常方便(它摆脱了很多错误检查代码).有时它是非常烦人的错误的来源(有时你仍然需要进行错误检查,并且它并不总是很明显).但它不太可能改变.这是该语言的基本部分.
归档时间: |
|
查看次数: |
93 次 |
最近记录: |