2012-11-28 88 views
-3
@synthesize username = _username; 
//Method1 
    - (void) viewDidLoad 
{ 
self.username = @"admin"; 
} 

//Method2 
- (void) viewDidLoad 
{ 
    _username = @"admin" 
} 

兩者都有效,有什麼區別?
我可以使用_username嗎?當我使用self.username時,它會去@synthesize username;
是self.username的一種方法嗎?
_username只是一個變量?
我用幾種方法編寫_username。它也可以在視圖中工作。 self.username比_username還是不快?在ViewController.m中,self.username與_username之間的區別是什麼

+2

查看http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/chapters/ocproperties.html – iDev

回答

1

self.username將調用username的setter,這就是斷點跳轉到synthesize語句的原因。

當你有一個_variable時,那麼該屬性可以使用_variable進行訪問。 而在你的情況:

self.username存儲值伊瓦爾_username_username = @"admin";也是值存儲到_username伊娃。手段都保存到相同的伊娃_username

清單4-2使用@synthesize 可以使用表格屬性=的ivar到指示特定 實例變量應該被用於屬性,例如:

@synthesize名字,姓氏,年齡= yearsOld;

這指定應該綜合firstName,lastName和 年齡的訪問方法,並且屬性年齡由 表示實例變量yearOld。的合成 方法其它方面通過可選屬性決定

請參閱self.username之間http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/ocproperties.html

0

我建議你通過apple documentation - Declared Propertiesself.username相當於其他語言的getter和setter方法。關於這件事只是幾件事。在ARC之前,它曾經幫助確保遵循內存管理部分(處理保留,釋放,複製參數)。 _username主要用於如init這樣的方法,當不推薦使用self.paraminitdealloc

0

差異與_username。

self.username使用訪問器(setter和getters)。他們稱這種方法和方法中的伊娃是被訪問的。

_username直接使用伊娃。 NO方法調用,所以這可以節省一些開銷。

self.username使您的類符合KVO,而_username繞過它。

+0

坦克你,我還沒有見過KVO和KVC,我將它谷歌它。這是一個有點不同的Java。 –

+0

在一行中...當一個對象改變另一個對象時會得到通知。 –

+0

如果您發現任何問題,請立即投訴並接受。 –

相關問題