在Objective C中有两种声明实例变量的方法吗?

时间:2012-03-02 20:36:42

标签: iphone objective-c ios

在大多数教程中,声明实例变量的方法是将其放在.h

@interface myViewController: UIViewController {

    UITextField *myTextField;
}

@property (nonatomic, retain) IBOutlet UITextField *myTextField;

和.m

@implementation myViewController
@synthetize myTextField;

但是在这个斯坦福大学课程http://itunes.apple.com/itunes-u/ipad-iphone-application-development/id480479762中,这样做的方式是

只在.h做:

@interface myViewController: UIViewController
@property (nonatomic, retain) IBOutlet UITextField *myTextField;

在.m中执行此操作:

@synthetize myTextField = _myTextField;

他们是等同的吗?第二种方法是否特定于iOS5?

3 个答案:

答案 0 :(得分:2)

它们在功能上是等同的。在ObjC 2.0中,synthesize关键字将自动创建关联的ivar,如果您未在synthesize语句中指定一个。{1}}关键字。所有现代运行时都会出现此功能。

答案 1 :(得分:1)

它们都以相同的方式工作,在最后一个实际上你有一个名为_myTextField的实例变量。我不知道这个“功能”何时开始,并且知道变量是否由编译器或预编译器插入会很有趣......

答案 2 :(得分:1)

存在差异,在第一个变体中,您可以在调试器中看到param的值 在第二个变体中,您无法在调试模式下看到param的值