OC-EX12@property新特性与总体总结

OC-EX12@property新特性与总体总结
 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    */

你可能感兴趣的:(OC-EX12@property新特性与总体总结)