2009-05-19 28 views
0

所以問題在這裏。目標C中的尋址和指針C

我有一個方法(或消息,因爲它們在obj-C中調用) 我正在傳遞一個指向對象的指針。

在那個方法裏面,我要改變那個指針指向的內容,並釋放舊的對象。我希望實例變量(正在傳遞給方法)現在引用分配給它的新值。基本上具有可變像OUT參數運行中的語言,如C#

-(NSDictionary *) GetListWithCommand:(NSString*) command andCache:(CachedMutableDictionary*) cache 
{ 
    CachedMutableDictionary* Dictionary = [Getfrom somesource]; 
    CachedMutableDictionary* temp = cache; 
    cache = [Dictionary retain]; 
    [temp release]; 
} 

,所以我認爲我需要在一個地址爲高速緩存變量引用發送,然後可以在地址級別指它既或者在對象級別。

在CachedMutableDictionary類上創建複製方法也可能更明智/更容易。

+1

究竟什麼是你問?你想知道這個代碼是否可以工作,或者如果這是做這種事情的最佳方式? – Tim 2009-05-19 13:26:45

回答

1

是的,它聽起來像這種方法需要採取一個CachedMutableDictionary **調用者通過緩存的&。該方法的最後三行成爲:

CachedMutableDictionary *temp = *cache; 
*cache = [Dictionary retain]; 
[temp release]; 

雖然這對我來說很有趣。緩存來自哪裏?它總是一個對象的實例變量嗎?爲什麼不傳遞對象?

+0

我同意它的味道很有趣。我想要做的是在兩個源(一個緩存的plist和一個XML源)之間進行選擇,並將Dictionary保存到一個對象中,這樣我就可以抓取字典而不必一遍又一遍地做出相同的決定。我也將這添加到我的代碼中,所以我試圖避免一個重要的重構。 – Bluephlame 2009-05-19 13:34:00

5

你一定要在這裏和那裏添加一些明星:

-(NSDictionary *) GetListWithCommand:(NSString*) command 
          andCache:(CachedMutableDictionary**) cache 
{ 
    CachedMutableDictionary* Dictionary = [Getfrom somesource]; 
    CachedMutableDictionary* temp = *cache; 
    *cache = [Dictionary retain]; 
    [temp release]; 
} 
+2

您應該確保緩存在取消引用之前不會實際爲空。 – 2009-05-19 20:08:33