2012-04-15 10 views
2

我很難理解如何理解將屬性設置爲變量和對象的實際用法。我嘗試閱讀許多教程和蘋果文檔,但仍然無法理解爲什麼我們應該使用一個屬性,爲什麼我們需要綜合該屬性?考慮我們宣佈在objective-c中如何使用屬性的實例?

@property(nonatomic,retain) NSString *str; 

爲什麼我們需要聲明一個屬性。據我瞭解,我們可以通過你的課程訪問字符串對象str。但爲什麼我們需要在這裏創建一個屬性?

有人可以幫我嗎?

+0

可能是重複的,可能會被關閉。這很不幸,因爲我對這個簡單而難以理解的話題並不認爲是足夠的。 – 2012-04-16 11:32:53

回答

4

屬性通常用於從類外部訪問實例變量。

舉例來說,如果你有一個指向你的類,你可以獲取/設置屬性這樣

someObject.str = @"some string"; 

您也可以@synthesize財產,通常是這樣的:

@synthesize str = _str; 

在該片段中,_str是屬性設置和獲取的實例變量。

屬性本質上只是創建訪問器(setters/getters)的捷徑。

例如,使用屬性的設置會是這個樣子:

- (void)setStr:(NSString *)str { 
    if(str != _str) { 
     [_str release]; 
     _str = [str retain]; 
    } 
} 

和吸氣會是這個樣子:

- (NSString *)str { 
    return _str; 
} 

通過創建屬性時,前兩個代碼塊會自動爲您創建。

+0

請注意,對於保留設置者,您應該在釋放舊值之前檢查新值是否與舊值不相等。否則,在事後保留它可能爲時已晚:D – 2012-04-15 17:44:19

+0

@Jenox oops,你是對的。固定:) – edc1591 2012-04-15 17:45:54

+0

我們不應該訪問代碼中的_str,除非我們保留/釋放它。對?在其他情況下,我們只能通過屬性str訪問_str。是這樣嗎。 – 2012-04-30 16:10:03

1

屬性是一個公共接口,它使其他對象能夠檢查並設置聲明變量的對象內的變量值。

通過編寫獲取和設置變量值的顯式方法,可以實現同樣的目的。

請注意,當你正確地理解它時,Objective-C中的屬性/合成對實際上是編譯器使用定義良好的模式爲您構建這些方法的簡稱。

因此,在目標c

@property(nonatomic,retain) NSString *str; 
.... 
synthesize str; 
... 

最終創建定義爲兩種方法:

void setStr:(NSString*) value; 
NSString* str; 

這寫作

Object.str = @"Hello world"; 
NSString* value = Object.str; 

獲取分別轉換爲:

[Object setStr:@"Hello world"]; 
NSString* value = [Object str]; 
1

使用屬性是Obj-C爲程序員提供的一種工具。

你可以編寫一個有或沒有屬性的程序。

可以將編譯器指令與@synthesize編譯器指令結合使用。

屬性聲明指示編譯器聲明一對getter/setter方法。 您必須手動編碼setter和getter。該屬性聲明允許您使用點符號來訪問實例變量。編譯器會將點符號轉換爲適當的getter/setter方法。

您可以使用@synthesize指令來告訴編譯器爲getter/setter方法生成代碼。

使用屬性,你必須編寫更少的代碼,你可以使用點符號。 另一種方式,不使用屬性,你必須編寫getter/setter方法,不允許使用點符號。

但是你可以編寫一個程序。所以,你需要使用屬性併合成它們。

相關問題