为什么不需要写@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已经基本不见显式使用了,除了在教程的代码中……

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

你可能感兴趣的:(OC)