f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
 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  */
posted on 2015-05-01 23:14 swp 阅读(136) 评论(0)  编辑 收藏 引用 所属分类: objective-c

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理