@property
在当前版本的 Objective-C 中,使用和声明 ivars 的官方标准和最佳实践是@synthesize
什么?有很多关于这个主题的帖子和资源,但其中大多数都在一两年前已经过时了。我最近学会了在类的实现中只在语句块中声明 ivars,这样就不会破坏 OOP 的封装原则,但是在这个时代甚至有必要声明 ivars 吗?什么是可能的用例:
@interface MyClass()
@property (nonatomic) NSString* data;
@end
@implementation MyClass{
@private
NSString* _data;
}
@end
有必要的?更进一步,是否有必要使用@synthesize
?我的理解是 using@property
将自动合成访问器方法和支持 ivars。我做了一些实验,我注意到当我没有NSString* _data', I can still access
在我的类实现中声明 _data' 时。这是否意味着声明 ivars 归结为风格问题,取决于程序员的判断?我可以压缩我的代码并在我的实现中删除语句块中的所有 ivar 声明并只@property
在我的私有接口中使用吗?如果不是这样,明确声明 ivars 的优点和缺点是什么?
最后,@dynamic
. 据我所知,它习惯于对编译器说,“嘿,编译器,不要自动生成访问器方法,如果找不到它的实现也不要担心,我会在运行时提供一个”。是全部@dynamic
用于还是有更多用途?
我只是想澄清所有这些事情,因为似乎有很多不同的意见,而且不一定有一个正确的答案。此外,随着 Objective-C 的发展和进步,这些答案会发生变化,因此最好有一份简明且最新的指南。感谢大家!(另外,如果有什么我可以说得更好或更清楚的地方,请告诉我)
编辑:
总之,我要问的是:
1) 有必要用现代 Objective-C 声明 ivars 吗?2)我可以通过使用来实现声明ivars和相应属性的相同效果@property
吗?3) @dynamic 是做什么用的?4)我可以完全放弃使用@synthesize
它还是有一个好的用例?
在您认为合适的情况下投赞成票和反对票。