2011-07-01 54 views
-1
NSMutableDictionary *searchFilters = [GlobalData instance].searchFilters; 
if([searchFilters count] == 0) 
{ 
    NSLog(@"no more keys, destroy global filters"); 

    [GlobalData instance].searchFilters = nil; // this is okay 

    // searchFilters = nil; <-- this is not okay 
} 

嗨,大家好,有人可以幫助我瞭解目標C中更好的指針嗎? 如上所示,我有一個存儲在名爲'GlobalData'的單例中的字典屬性,使用指針* searchFilters我可以指向這個字典並正確讀取它的值,但是,如果我想修改它的值,代碼就像'searchFilters = nil'根本不會修改全局單例中的值。指向一個屬性在單身人士

我需要一個[GlobalData實例] .searchFilters的快捷方式,這樣我就不必每次都重新輸入「[GlobalData實例] .searchFilters」...它是一個指針,指向指針的指針,watever,我想知道是否有機會更快地解決單身人士的財產問題。

+0

我的觀點就是這個。我需要一個快捷方式到[GlobalData實例] .searchFilters ,這樣我就不必每次都重新輸入「[GlobalData instance] .searchFilters」...它是一個指針,指向指針的指針,watever,我想知道的是在那裏要更快地解決單身人士的財產問題。 – mkto

回答

1

您的指針searchFilters指向與[GlobalData實例] .searchFilters相同的位置,但它不是相同的指針,您創建的是別名。

因此searchFilters = nil將nil分配給您創建的別名,原始指針保持不變。

這是相同的行爲C :)

+0

我想使用別名來取消原始值。可能嗎。 我試過* searchFilters = null;也失敗。 – mkto

+0

您不能通過取消別名來取消指針,而別名是完全不同的指針。 * searchFilters = null所做的只是通過searchFilters將「null」賦值給值指針。 IIRC,Obj-C中沒有空值。 –

0

你必須指向同一個對象的兩個不同的指針。對象是單例的事實沒有區別 - 它們是不同的變量,它們恰好共享相同的值。類似地:

int a = 5; 
int b = a; 
b = 6; 
printf("a = %d and b = %d", a, b); // Prints "a = 5 and b = 6 

ab是相互獨立的,即使它們都包含在值5最初完全不同的變量。

+0

我完全可以理解你的例子。但在這個例子中,b不是一個指針。我假設我的searchFilters是一個指針,因此我應該有權利用這個指針修改原始值......但是看起來它更像是一個從指向值中複製數據的變量容器...... – mkto