Objective-C 声明属性
创建: 2018/01/24
完成: 2018/01/25
遗留: TODO
声明属性(declared property)
属性的声明与功能 | ||||||||||||||||||||||||||||||||||||||||||
属性的声明 |
@property 读写 @property(readonly) 只可读 ● 多个用逗号连接 ● 也可以自己声明 |
|||||||||||||||||||||||||||||||||||||||||
属性的实现 |
用@property声明的变量可以用@synthesize ● 多个用逗号连接 ● 如果不带@synthesize, 内部属性名字变成_名字
@interface Sample : NSObject @property int sample; @end @implementation Sample //内部为名为int _sample; @end 也可以在内部改名, 类内部用其他名称来使用 @synthesize value = runningAverage; //类内其他方法处该属性名字变为等号右边,外部不变 ● 可读生成getter, 可读写生成getter, setter ● 必须已经声明了@property ● 如果不需要接入类方法(getter, setter), 可以用@dynamic 也可以不要
|
|||||||||||||||||||||||||||||||||||||||||
@dynamic |
相关的getter, setter由自己实现 不实现也不报错,但是调用时程序会崩溃 |
|||||||||||||||||||||||||||||||||||||||||
属性的option |
指定多个用,隔开
|
|||||||||||||||||||||||||||||||||||||||||
值设定方法的选项 |
# TODO: Supply [property属性的值设定方法选项的详细 p169] # TODO: Supply [多线程 p480] |
|||||||||||||||||||||||||||||||||||||||||
属性的继承 |
● 可以重载getter, setter ● 除了readonly可以变成readwrite以外,@property必须一样 ● 子类不能用@sythesize来实现父类的声明属性 ● 类型, 协议内部可以有声明属性但不能有@sythesize, 在实现部(@implementation)处自己实现 # TODO: Supply [类型, 协议内部可以有声明属性但不能有@sythesize] |
|||||||||||||||||||||||||||||||||||||||||
不能和方法族重合 |
用ARC时方法不能属于方法族 alloc方法族 copy方法族 mutableCopy方法族 new方法族 init方法族 |
|||||||||||||||||||||||||||||||||||||||||
点运算符获取属性 | ||||||||||||||||||||||||||||||||||||||||||
相当于发出信息 | 结论: 尽量不要用点运算符获取属性
sample.var; // 获取 相当于 [sample val] sample.val = n; // 设定 相当于 [sample setVal: n] sample.method; // 不带参数的方法呼出方法, 不要这么用
注意: ● 不能用在id类上 ● 不能用在只有setter的上面
|
|||||||||||||||||||||||||||||||||||||||||
● 可以连续使用 n = obj.productionList.length; ● 可以连续代入 n = obj.count = obj.depth = ++n; ● 递减递减,复合代入运算符的解释 n = obj.length++; //相当于 n = [obj setLength: [obj length] + 1]; n *= obj.length; //相当于 n = [obj setLength: [obj length] * n]; ● 类内部呼出声明属性方法 self.count = 12; super.depth = maxDepth; ● 和构造体的点运算符混用 属性是构造体的时候 struct Sample a = ...; //构造体 obj.b = a; obj.b.length = 5; //相当于 [obj b].length = 5;
|
||||||||||||||||||||||||||||||||||||||||||
获取属性的方针 |
● 构造函数里面直接获取属性 ● 内部函数的话,最好都用声明属性的方法,也可以直接获取。最好固定一种 |
|||||||||||||||||||||||||||||||||||||||||