1 #import <Foundation/Foundation.h>
2
3 @interface Car : NSObject
4 {
5
6 }
7
8 @property int speed;
9 @property int wheels;
10
11 @end
12
13 @implementation Car
14
15 // 第一步简化:不用写成员变量。(使用synthesize自动生成)
16 // @synthesize会访问_speed成员变量,如果不存在,则自动生成_speed的成员变量。
17 @synthesize speed; // 说明了synthesize默认访问的speed,所以会生成speed成员变量。
18 @synthesize wheels = _wheels; // 已经指定了setter、getter访问的成员变量,所以如果没有,会自动生成。
19
20 @end
21
22
23 int main() {
24
25 Car *c = [Car new];
26 c.speed = 10;
27
28 return 0;
29 }
30
31 // 最简化写法:
32 /*
33 总体总结
34 ======================================================================================
35 @property的基本作用:
36 自动生成getter、setter的声明。
37
38 @synthesize的基本作用:
39 自动生成getter、setter的实现。
40
41
42 @synthsize的2个使用细节:
43
44 @synthesize age的使用细节:
45 1.自动访问age成员变量
46 2.如果age不存在,则自动生成@private的成员变量age;
47
48 @synthesize age = _age;
49 1.会自动访问_age成员变量
50 2.如果_age成员变量不存在,会自动生成私有的_age成员变量。
51 ===================================================================
52 @property新特性的作用(主要做了三件事):
53 1.生成带下划线的私有成员变量。
54 2.按照属性名生成相应的setter与getter
55 3.自动生成setter与getter实现(或者说是自动生成简化的第一步)。
56
57 @property新特性注意事项:
58 大原则:有的就不生成、没有的才自动生成。
59
60 1.你有定义的setter、getter则不自动生成,没有的话,才会自动生成。
61
62 2.如果setter和getter都自定义了,那么则不会再自动生成setter、getter。包括带下划线的成员变量,所以这句话,相当于是废的。
63 分析:因为自动生成setter、getter就是为了给成员变量使用,如果不自动生成,那么也就没必要自动生成私有的成员变量。
64
65 3.如果想要不是私有的成员变量,那么可以自己定义。 再使用@property,此时如果存在这个成员变量,
66 它就不会再自动生成,其作用域也就不是固定的私有,而是自己定的。
67 */