IOS for @property 之我见

此文章以IOS7.1为例

IOS引入@property 是为每个实例变量自动添加setter和getter方法,例如:

@property (nonatomic,copy)NSString *name;

@property (nonatomic)BOOL matched;

引入这种定义,代码已经自动为你实现好了下列方法:

- (NSString *)name

{

   return _name;

}

- (void)setName:(NSString *)name

{

   if(_name == name)

    {

        [name copy];

    }

   else

    {

        _name = name;

    }

}

- (BOOL)matched{

   return _matched;

}

- (void)setMatched:(BOOL)matched{

    _matched = matched;

}

你就可以直接调用这些方法了,关于@property后面括号里面的nonatomiccopy, strong ,weak,assign, retain在此暂时不作介绍,有的时候我们为了使代码更有可读性会有

@property (nonatomic,getter = isMatched)BOOL matched;这种形式的存在,其实这是修改了getter方法,也就是getter方法由原来的

- (BOOL)matched{

    return _matched;

}改为了:

- (BOOL)isMatched{

    return _matched;

}

引入@property以后,可能为了跟其它方法调用作区分所以就引入了点语法,此时我们创建完一个实例后,我们就可以直接调用其自动生成的方法了如:

Object *object = [[Object alloc]init]//创建了一个为nil的实例。

object.name 调用其方法

object.name其实是先调用setter方法然后再调用了getter方法,其等价于

[object setName:(NSString*)name] 

[object name]

如果在代码设计的过程中自动生成的setter 和 getter方法无法满足我们的需要,此时我们可以自己修改其中的一个方法(一般情况下我们可能会修改setter方法)所以我们就得在代码实现的地方加入

@synthesize name = _name; 然后再加入我们要修改的方法

- (void)setName:(NSString *)name

{

    自己实现setter 方法

}

如果自动生成的setter和getter方法已经能满足我们需求了,其实这样定义

@property (nonatomiccopyNSString *name;

@property (nonatomicBOOL matched;

就OK了,无需再在代码的实现部份加入下列代码了(当然加上也没有问题)

@synthesize name =_name;

@synthesize matched = _matched;


限有自己水平有限,不知是否描述正确,还希望有大神指点,也希望能给对@property有困惑的童鞋带来一点思路。




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值