Object-C XCode 编译指令@property

37 篇文章 1 订阅
19 篇文章 0 订阅

几乎所有的编程语言都会有一些语法糖。Object-C也不例外,尤其是适用XCode编程时。

@property编译指令,要求编译器自动生成某个属性的getter/setter方法。对于较早Xcode版本(4.4及以前),@property可能还需要和@synthesize指令共同使用来完成相应功能。


@property的基本语法

          @property  [ ( [attribute]  [ , attribute]  [ , attribute ...]  ) ]  typeName   valueName

方括号[ ],是可选项。

attribute是限定修饰的valueName,通常有如下几个可选项:

读写

      readonly ,只产生简单的getter,没有setter。

      readwrite ,产生setter\getter方法,默认类型。

setter语意

      assign ,默认类型,setter方法直接赋值,而不进行retain操作。

      retain ,setter方法对参数进行release旧值,再retain新值。

      copy ,setter方法进行Copy操作,与retain一样。

原子操作

      nonatomic,非原子

      atomic,原子(默认)

对于ARC工程,attribute还可以是strong,weak。


对于下面的代码

@property(nonatomic,copy) NSString *name;
//在.m文件中。
//对于Xcode4.5及以上,这部分代码可以删除
@synthesize name = _name; 

等同于实现了下面的代码

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

在使用@property指令时,需要注意的是:Xcode4.5及以上,会自动生成或者合并形式为_valueName的变量。这不是一个好的便利,可能会造成不必要的麻烦。

例如,@property  int  number, 如果已经存在 int类型的_number变量,那么getter/setter就直接操作这个变量;如果不存在,那么就自动生成一个int类型的_number变量


@property指令,我个人认为它最大的作用就是使代码看起来简洁而已,可阅读性增强,但是隐藏了包括多线程和内存管理在内细节,这可能会增加程序员出错的几率。

另外,同.net c++ 或C#的property关键字语法比起来,@property指令给我的感觉就显得过于臃肿和不灵活。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值