在iOS中需要解释@ property / @ synthesize
不是一个完整的noob我对iOS编程和Ojbective-C相当新。 我主要来自C(DSP,微控制器),Delphi XE2 / Pascal,Visual Basic和Java(桌面和Android应用程序)的背景。
我主要是从Apress那里学习Cocoa的书“Beginning iOS 5 Development”。
最近,我观看了WWDC 2012的video,并通过了他们的一些示例代码,我必须说我对编写我的应用程序的正确方式感到困惑,更具体地说,我对@ property / @综合词语感到困惑。
在本书中,绝大多数(并非全部)示例代码用来定义一个属性,例如
ViewController.h @property (strong, nonatomic) NSMutableArray *list; ViewController.m @synthesize list;
然后所有的代码访问合成列表
self.list
甚至简单地说
list
现在,在我阅读的每一个WWDC代码示例中,我都看到程序员定义了一个属性,但是在.m文件中他们会这样做
@synthesize list = _list;
和访问有时
self.list
要么
_list
我很困惑。 什么是正确的做法? 作为苹果程序员都使用下划线,我认为我应该这样做,但为什么书没有? list和_list有区别吗? 还有更多,因为我在同一个对象为什么有时使用self.list和有时列表/ _list。
有时候他们不使用@synthesize,我假定他们想要重写他们自己的访问器和增变器(这从来不是我的情况)。
我已经在网上阅读,但没有足够清楚的设置我的想法,所以我指望StackOverflow在这里带来光明。
最后但并非最不重要的,我更喜欢和回答基于当前的iOS 6最佳实践/编程技术。 无用的告诉我如何在旧的iOS中正确地做到这一点。
没有正确的方法。 只有你的首选风格。
最新的编译器在属性声明上做了一个隐式综合。
@synthesize list = _list;
。
没有什么是你的代码写的。 它恰好发生。
但是,这并不能阻止你明确地这样做。
@synthesize list = somethingelse;
所以当你通过访问器( self.list
)请求一个指向list
的指针时,你会得到一个指向somethingelse
的指针
在大多数情况下, NSMutableArray *thing = self.list
相当于NSMutableArray *thing = somethingelse
只是因为苹果使用的风格并不意味着你必须这样做。 每家公司通常都有自己的编码风格。
使用@synthesize list;
的主要问题@synthesize list;
这是它可能会写的风险
self.list = thing
或list = thing
。
前者使用setList:
accessor,而后者则不使用,并在代码中放置相关错误的风险,虽然它不像ARC
那样糟糕,因为你不会为strong
属性发生泄漏。
你使用什么风格,保持一致,并注意使用伊娃直接list = thing
的效果相比,使用它的访问者self.list = thing
这是一个在过去几年迅速发展起来的语言特征,它解释了各种forms。 使用最新的工具,您可以select忽略@synthesize
并让事情合理地工作。
在这种情况下的默认行为会产生与@synthesize list = _list;
相同的效果@synthesize list = _list;
。