2011-04-07 13 views
1

我在做一個值對象/實體,它爲我的模型保存數據。 現在,我從Web服務獲取數據作爲JSON,而不是將所有不同的對象從解析的JSON移動到我的實體上的不同屬性中。即讀出@「name」鍵的NSString並將其設置爲[Entity setName:[JSONDictionary objectForKey:@"name"]等。我的實體有一個實際屬性, NSDictionary *dataDictionary,該屬性在它離開解析器時保存JSON字典。@覆蓋訪問器時的語法語法

現在,當我需要的名稱值我寫的,看起來像這樣的訪問:

- (NSString*) name { 
    return [self.dataDictionary objectForKey:@"name"]; 
} 

這是很好的,我沒有做任何工作,除非是特定財產的請求。

現在我的問題是如何最好地告訴編譯器存取器存在,但不具有「真實」屬性。 我有這個在我的界面:

@property(nonatomic, retain) NSString *name; 

而在我執行@synthesize,但這似乎開創我的邏輯的開銷。據我所知,Objective C將爲我創建一個內存空間,用於存儲NSString類型的對象,當我執行@property(nonatomic, retain)時,技術上我不需要這個,因爲我已經將該值存儲在NSDictionary *dataDictionary

如果我使它@dynamic我想我也將不得不提供一個我永遠不需要的setter。

那麼,有沒有一種語法可以讓所有訪問實體的對象產生幻覺,這些是「普通」屬性,但實體內部不會分配/存儲不必要的對象,或者編寫比需要的代碼更多的代碼?

回答

1

在您的界面中聲明name方法,而不是屬性。

- (void)name; 
+0

是的,當然:),好多了。我過於複雜,然後我總是可以選擇 - (void)setName:(NSString *),如果我需要它的話。謝謝。 – RickiG 2011-04-07 12:44:26

+0

不用擔心@RickiG。這就是合成屬性爲你所做的事情 - 根據你提供的幾個變量參數創建getter(和setter)方法。 – Rog 2011-04-07 20:23:44

+0

是的,所以我首先要求編譯器爲我生成訪問器,然後重寫它們。浪費電子:)我想沒有額外的[值保留]因爲重寫,但方法方法更容易閱讀 – RickiG 2011-04-08 18:24:54