前言
- 属性合成指令
@synthesize
,主动指定属性使用的成员变量名称
- 一旦重写了readonly属性的getter方法,_的成员变量就不存在了 ,籍此来保护变量不会被不恰当的访问,所以我们可以使用
synthesize
主动指定属性使用的成员变量名称。
I @synthesize的应用
1.1 同时重写getter和setter
objective-c下如果某属性的getter,setter都要重写的话需要声明实例变量。
使用property的时候,单独重写任意一个方法都不会报错,但同时重写set get方法就会报错。主要是因为当你重写了get和set方法之后@property默认生成的合成方法就不会起作用了, 这也就意味着你的类不会自动生成出实例变量了,你就必须要自己声明实例变量。
- 声明实例变量第一种办法
- 声明实例变量第二种办法
1.2 synthesize与readOnly 关键字配合使用
- 问题: 使用readonly修饰成员变量的话,将不会生产带下划线的成员变量 undeclared identifier '_image',
- 解决方法如下:@synthesize 合成指令 --主动指定属性使用的成员变量名称
- 例子
II 相关基础知识
2.1 正向类声明(前置声明)
场景:头文件@interface声明有时候会在属性中引用外部类或者作为参数类型
通常做法:给每个外部类添加 #import 语句
正向类声明: 在头文件使用@class
前置声明,并且在 implementation 中引入个外部类。
正向类声明编译时间更短,循环引用的机会更少;
2.2 .语法的使用
- 使用前提 : 使用 @property @synthesize 合成 setter 和 getter 方法; 也允许使用
.
语法访问属性 和 对属性赋值; - 本质 : 点语法是一种简单写法, 其本质仍然是 getter 和 setter 方法;
获取属性值 : 只要对象有 getter 方法, 程序可以使用
点
语法获取属性值;设置属性值 : 只要对象有setter 方法, 程序可以使用
点
语法获取属性值;
2.3 KVC
Object-C 可以通过 getter setter 方法操作属性, 还可以以字符串形式间接操作属性, 该方式是 Key Value Coding (KVC)。
KVC 使用前提 :
- 接口部分使用 @property
- 实现类部分使用 @synthesize 合成存取方法
- 只定义 "_属性名" 或 "属性名" 成员变量,
see also
iOS基础业务知识