我应该在接口中声明variables还是在objective-c arc中使用属性?
方法1:
@interface MyController : UIViewController { UILabel *myText; } @property (nonatomic, strong) UILabel *myText;
方法2:
@interface MyController : UIViewController @property (nonatomic, strong) UILabel *myText;
方法3:
@interface MyController : UIViewController { UILabel *myText; }
我读过一些关于这种东西的文章,但是我还没有真正意识到我必须采用哪种方法。
我也发现有人说方法1是一个古老的方式,所以我想知道使用ARC的ios sdk 6的最佳做法。
我知道使用属性声明variables是生成getter和setter的简单方法,有人build议使用它。 但是,我想问一个variables是不是由另一个类调用,是否有必要为variables使用属性? 并将其设置为接口内的私有variables? 还是只有在界面内声明的variables才更好? 我想学习最好的做法,所以请原谅我,如果这是一个愚蠢的问题。
而且,有些开发者用这种方式写@synthesize
@synthesize myText=_myText;
但有些写道:
@synthesize myText;
我也想知道其中的差别,哪一个更好?
非常感谢你!
最现代的方式1 :
- 只要有可能,就宣布属性
- 不要单独声明iVar 2
- 不要@synthesize 3
- 在你的.h文件中find尽可能less的属性4
- 在.m文件中的类扩展名中尽可能多地find属性5
1从Xcode 4.5.2开始。 这大部分适用于4.4,其中一些不会在4.2(Snow Leopard下的最新版本)上编译。 这是预处理器的东西,所以它是所有兼容至lessiOS5(我还没有在iOS4上testing,但也应该是确定的)。
2声明一个iVar 和一个财产是没有意义的。 我相信有一些晦涩的情况,你想要声明的iVars 而不是属性,但我想不出任何。
3 Xcode将创build一个名称与属性相同的iVar,前面有一个_underscore。 如果你(很less)需要一些其他types的行为,你可以手动@synthesize property = someOtherName
。 @vikingosegundo将我们链接到dynamicivars上的这篇文章 ,这是@synthesize
一个用例。 @RobNapier评论说,如果你正在为一个属性创build你自己的getter(只读)和setter(读/写),你需要@synthesize iVar = _iVar
(奇怪),因为在这种情况下,预处理器不会为你生成iVar 。
4与您的界面的一般规则:保持尽可能空。 如果他们是私人使用的,你现在根本不需要声明你的方法 。 如果你能让代码在没有接口声明的情况下工作,那就是要走的路。
5这是.m文件中的@interface块,位于@implementation之上:
#TestClass.m @interface TestClass() //private property declarations here @end @implementation TestClass ...
如果你喜欢@synthesize属性的好表,你可以使用@synthesize,你可以参考和评论清晰度和组织。
而且,@synthesize允许你在属性上设置一个断点,并且当它的值被改变的时候陷阱。
当编译器为你做所有事情时,你最终会远离真正发生的事情,并且无知。 但是,无需一直打印所有的东西也很好。