本文介绍: 属性”(property)是Objective-C的一项特性,用于封装对象中的数据。Objective-C对象通常会把所需要的数据保存为各种实例变量,实例变量一般通过“存取方法”(access method)来访问。Objective-C 2.0后,经“属性”这一特性的引入,开发者可以令编译器自动编写与属性相关的存取方法。
第6条:理解“属性”这一概念
1. 属性的概念
“属性”(property)是Objective-C的一项特性,用于封装对象中的数据。
Objective-C对象通常会把所需要的数据保存为各种实例变量,实例变量一般通过“存取方法”(access method)来访问。Objective-C 2.0后,经“属性”这一特性的引入,开发者可以令编译器自动编写与属性相关的存取方法。
2. 实例变量
*** 2.1 在类接口的public区段中声明实例变量的劣势? ***
这种做法在编译期已经将实例变量的代码替换为特定的“偏移量”(offset)了,所以,如果又增加了一个新的实例变量,就会出现问题。
图例:
*** 2.2 Objective-C的解决办法! ***
*** 2.2.1 应用程序二进制接口 ***
Objective-C引入了“应用程序二进制接口”(Application Binary Interface,ABI)。
这种做法是,把实例变量当作一种存储偏移量所用的“特殊变量”,交由“类对象”保管。偏移量会在运行期查找,如果类的定义变了,那么存储的偏移量也就变了,这样的话,无论何时访问实例变量,总能使用正确的偏移量,甚至可以在运行期向类中新增实例变量。
总结:可以在“class–continuation分类”或实现文件中定义实例变量。所以,不一定要在接口把全部实例变量都声明好,可以将某些变量从接口的public区段里移走,以便保护与类实现有关的内部信息。
*** 2.2.2 另外一种解决办法 ***
尽量不要直接访问实例变量,而应该通过存取方法来做。但是,存取方法有着严格的命名规范,所以,Objective-C引入了属性@property语法,让编译器自动编写存取方法。当然,开发者也可以自己编写存取方法。
3. 属性@property
要点
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。