此文章以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后面括号里面的nonatomic, copy, 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 (nonatomic, copy) NSString *name;
@property (nonatomic) BOOL matched;
就OK了,无需再在代码的实现部份加入下列代码了(当然加上也没有问题)
@synthesize name =_name;
@synthesize matched = _matched;
限有自己水平有限,不知是否描述正确,还希望有大神指点,也希望能给对@property有困惑的童鞋带来一点思路。