Ste*_*Arn 8 properties objective-c
据我所知,@ property表示.h文件中的getter和setter,而@synthesize在.m文件中实现了getter和setter.此外,可以为getter和setter编写自己的实现,而不是使用@synthesize.
因此,如果我们总是需要实现setter/getter,为什么我们需要另外声明呢?@property似乎对我来说是语义冗余,也是bug的来源.
当我声明@property但忘记用@synthesize或手动实现它时会发生什么?当我使用@synthesize并忘记@property声明时会发生什么?
ste*_* k. 26
现在默认情况下合成属性,因为Xcode 4.4,所以是的,你是对的,它是多余的,Apple删除了编写@property和@synthesize的需要,从现在开始只使用@property.
在.h文件中有下面
@property (retain, nonatomic) NSString* userName;
Run Code Online (Sandbox Code Playgroud)
是语法糖
-(NSString*)userName;
-(void)setUserName:(NSString*)userName;
Run Code Online (Sandbox Code Playgroud)
在.h文件中
而@synthesize在.M是离开了自己实施的语法糖尊重你的retain,nonatomic等在你的财产申报规定.
你不能用@property合成,即使你在.h文件中指定了合适的getter,setter签名.
但是你可以离开@synthesize并实现你自己的getter和setter.
如果同时执行@synthesize和自定义getter setter,则运行时会尊重您的实现并调用相同的实现.