iOS开发之oc(七)--@property和@synthesize

@property和@synthesize

首先从翻译来看: @property(翻译为:性质)和@synthesize(合成),是不是很像属性(声明)和实现

1. @property

用在@inteface中

用来自动生成setter和getter方法的声明,

@property int age;就可以代替下面的两行

- (void)setAge:(int)age;  // setter
- (int)age;   // getter

2.@synthesize(只做了解)

用在@implementation中

用来自动生成setter和getter方法的实现,并且会访问成员变量

用@synthesize age = _age;就可以代替

- (int)age{
    return _age;
}
- (void)setAge:(int)age{
    _age = age;
}

3. @synthesize的细节(只做了解)

  • @synthesize age = _age;

>  setter和getter实现中会访问成员变量_age

> 如果成员变量_age不存在,就会自动生成一个@private的成员变量_age

  • @synthesize age;        不写age=age(就是默认这样)

>setter和getter实现中会访问成员变量age

>如果成员变量age不存在,就会自动生成一个@private的成员变量age

  • 手动实现

>若手动实现了setter方法,编译器就只会自动生成getter方法

>若手动实现了getter方法,编译器就只会自动生成setter方法

>若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量

4. @property新特性(哈哈,现在就用这个)

  • 自从Xcode 4.x后,@property就独揽了@synthesize的功能。也就是说,@property可以同时生成setter和getter的声明和实现

  • 默认情况下,自动生成setter和getter的声明和实现,并且会去访问下划线 _ 开头的成员变量

  • 比如@property  int age; 做了三件事(以后就这样写,不用@synthesize):

    1)生成set和get方法的声明

    2)生成带下划线_age成员变量(它生成的变量是私有的—private)

    3)生成set和get方法的实现

     缺点是:成员变量是私有的,子类方法中不能访问(只能添加 {。。int  _age。。} 弄成 protected)

posted @ 2015-02-24 14:29  timo1234  阅读(416)  评论(0编辑  收藏  举报