iOS 一般知识点

ios @proterty @synthesize详解

2018-02-01  本文已影响8人  LeeRich
作者:反调唱唱
链接:https://www.jianshu.com/p/70c7bf99576b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

@property(nonatomic,copy)NSString *name;
相当于是声明了:

-(NSString *)name;
-(void)setName:(NSString *)str;

而@synthesize name = _name;

如果没有定义NSString *_name;
相当于先定义了NSString *_name;
再实现了:

-(NSString *)name{
  return _name;
}
-(void)setName:(NSString *)str{
if(_name != str){
  [_name release];
  _name = [str retain];
  }
}

当然,如果自己本身就已经实现了

对于现在,如果不使用@synthesize name = _name;也默认是使用@synthesize name = _name;

@synthesize name;
如果使用的是@synthesize name;
那么对于上面的变量则为生成的是name而不是_name;
相当于是


@synthesize name = testName;
如果使用的是@synthesize name = testName;
则对于上面的变量则为生成的是testName而不是name,方法也对应改变,总之:定义的变量是根据@synthesize name = xx;来定的。


对于@property的参数
如果是使用@property(nonatomic,copy,getter=familyName)NSString *name;
则是相当于get方法为:

也可以使用setter=getFamilyName;不过如果同时使用getter=和setter=并且自己实现了相应方法的话,必须要用@synthesize name = xx;否则会报错。

对于@property各参数意义如下:

readwrite: 产生setter\getter方法(默认参数)
readonly: 只产生简单的getter,没有setter。
assign: 默认类型,setter方法直接赋值,而不进行retain操作(默认参数)
retain: setter方法对参数进行release旧值,再retain新值。
copy: setter方法进行Copy操作,与retain一样
nonatomic: 禁止多线程,变量保护,提高性能
atomic:原子性的访问方法(默认参数)
还有strong和weak等
上一篇下一篇

猜你喜欢

热点阅读