2012-03-02 55 views
0

在大多數教程,聲明實例變量的辦法是把它放在.H在Objective C中有2種聲明實例變量的方法嗎?

@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; 

In .m是這樣做的:

@synthetize myTextField = _myTextField; 

它們是否等同?是iOS5特有的第二種方法嗎?

+0

的[可能重複是否有任何理由,如果你申報的ivars」重新使用Objective-C中的屬性?](http://stackoverflow.com/questions/4903651/is-there-any-reason-to-declare-ivars-if-youre-using-properties-exclusively-in-o ) – 2012-03-02 20:47:52

+0

在2.0版本的語言規範中添加了@ @ property和@ @ synthesize(和@ @ dynamic')關鍵字。如果你是蘋果開發者,他們的[Objective-C語言](https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html)參考是有用的知識 – bshirley 2012-03-02 21:01:10

+0

@Josh我的問題不是關於我是否應該使用ivars:我想使用它們。我的問題是關於宣佈他們的兩種方式。或者,也許我不知道什麼是ivars,因爲我是新手,但我正在討論與其他編程語言相同的實例變量。 – user310291 2012-03-05 20:17:56

回答

2

它們在功能上是等效的。在ObjC 2.0中,synthesize關鍵字將自動創建關聯的伊娃,如果您沒有將其指定爲synthesize語句的一部分。此功能在所有現代運行時都存在。

1

它們都以相同的方式工作,最後一個實際上有一個名爲_myTextField的實例變量。我不知道這個「特性」何時開始,並且知道該變量是否由編譯器或預編譯器插入是很有趣的...

1

diffrence存在,在第一個變體,你可以看到特性參數的值在第二個變體調試 你不能看到在調試模式特性參數的值

+0

好的,如果真的,我會明天檢查我會給你正確的答案;) – user310291 2012-03-04 10:57:54