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 */