我应该在接口中声明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允许你在属性上设置一个断点,并且当它的值被改变的时候陷阱。

当编译器为你做所有事情时,你最终会远离真正发生的事情,并且无知。 但是,无需一直打印所有的东西也很好。