// OC 中的 getter setter

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也可以批量生命,数据类型不同也可以批量声明.

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值