为什么不需要写@synthesize

写这篇博文是为了记录自己开始接触OC时遇到的一个让自己感到困惑的问题。

绝大多数教程都会指出使用@proterty的时候,要和@synthesize搭配使用。在.h文件中使用@proterty声明变量,实现getter/setter方法的自动声明,然后在.m文件中使用@synthesize,使getter/setter方法自动实现。

//.h文件
@property (nonatomic,copy)NSString *str;
//.m文件
@synthesize str = _str;

然而,实际上我们并不需要在.m文件使用@synthesize,只要使用了@property我们就可以正常使用getter/setter方法。

//.h文件,实际只要这句就可以使用getter和setter
@property (nonatomic,copy)NSString *str;

我不知道有没有人和我有同样的困惑,最起码我百度过,并没有相关的解析。最近查了一些资料,得到了答案。

当我们使用了@property,又没有在.m文件使用@synthesize的时候,clang会为我们自动添加(没错是clang编译器,而不是Xcode),这个功能在Xcode 4.4版本正式投入使用(有人提到Xcode 4.0 DP 4已经尝试加入这个特性,但是因为一些bug很快被移除)。这个自动添加的功能实现的代码就和我们平时在.m文件中使用@synthesize一样

//和这句是一样的
@synthesize str = _str;

现在Xcode已经是7+版本了,所以@synthesize已经基本不见显式使用了,除了在教程的代码中……

希望能帮到一些对此有所疑惑的同学。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值