// OC 中的 getter setter

来源:互联网 发布:类似openvpn的软件 编辑:程序博客网 时间:2024/05/17 06:20

Objective-C - setter/getter方法的自动生成:

大前提:Xcode在4.4版本之前@property,@synthesize的用法和使用注意:
@property:(写在@interface中)
1> 作用
自动生成setter/getter方法的声明.
2> 语法格式
@property 数据类型 数据名称.
3> 工作原理
编译器在编译的时候会自动的生成setter方法的声明:- (void)set首字母大写的数据名称:(数据类型)数据名称;
自动的生成getter方法的声明:- (数据类型)数据名称;
4>使用注意
1, @property的数据类型和数据名称要和属性一致,属性的数据名称不带下划线;
2, @property的数据类型相同的时候可以批量的声明,数据类型不同是不可以批量声明的;

@synthesize:(写在@implementation中)    1> 作用        自动生成setter/getter方法的实现.    2> 语法格式        @property 数据名称.    3> 工作原理        1, 编译器在编译的时候会自动的生成一个与@property相对应的真私有属性,即声明在@implementation中的.        2, 自动生成setter方法的实现,在方法的内部直接将参数赋值给了它自动生成的真私有属性.        3, 自动生成getter方法的实现,在方法的内部直接返回它自动生成的真私有属性的值.如下代码:         @interface YYPerson : NSObject         {            NSString *_name;         }         @property NSString *name;         @end         @implementation YYPerson         @synthesize name;         @end等价于:         @interface YYPerson : NSObject         {            NSString *_name;         }         - (void)setName:(NSString *)name;         - (NSString *)name;         @end         @implementation YYPerson         {            NSString *name;         }         - (void)setName:(NSString *)name         {            self->name = name;         }         - (NSString *)name         {            return self->name;         }         @end    4> 使用注意        1, 因为@synthesize自动生成了一个与@property相对应的不带下划线的真私有属性,而使得在@interface中声明的的带下划线         的属性显得多余,因此可以将@interface中声明的的带下划线的属性注释掉;        但@synthesize自动生成的不带下划线的真私有属性又很不规范,所以@synthesize的时候使用以下格式:            @synthesize @property名称 = 定义在@interface中的带下划线的属性名,即: @synthesize name = _name;        这样写的意义:            1,@synthesize不会自动生成私有属性;            2,自动生成setter方法的实现,在方法的内部直接将参数的值赋值给后面指定的属性.            3,自动生成getter方法的实现,在方法的内部直接返回后面指定的属性的值.此时代码如下:         @implementation YYPerson         @synthesize name = _name;         @end等价于:         @implementation YYPerson         {            NSString *name;         }         - (void)setName:(NSString *)name         {            _name = name;         }         - (NSString *)name         {            return _name;         }         @end        2, @synthesize生成的setter方法的实现,没有逻辑判断,是直接赋值或返回的.                如果需要逻辑判断,则需要重写setter方法.        3, @synthesize也可以批量生命,数据类型不同也可以批量声明.

*/

0 0
原创粉丝点击