2011-07-01 19 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 
} 

こんにちは、誰かがObjective Cのより良いポインターを理解するのを助けることができますか? 上記のように、私は辞書のプロパティを 'GlobalData'というポインタを使って 'GlobalData'という名前で格納しています* searchFilters私はこの辞書を指してその値を正しく読み取ることができますが、値を変更したい場合は 'searchFilters = nil 'は、グローバルシングルトンの値をまったく変更しません。シングルトンのプロパティへのポインター

[GlobalData instance] .searchFiltersへのショートカットが必要なので、「GlobalData instance .searchFilters」を毎回再入力する必要はありません。ポインタ、ポインタ、何でも、私はしたいシングルトン内のそのプロパティに速やかに対処するためにワットがあることを知っています。

+0

私の要点はそれです。 [GlobalData instance] .searchFiltersへのショートカットが必要です 私は "[GlobalData instance] .searchFilters"を毎回再入力する必要はありません。そのため、ポインタ、ポインタへのポインタ、何でも知りたいものですシングルトン内のそのプロパティに速やかに対処するためにウォッチする必要があります。 – mkto

答えて

1

ポインタsearchFiltersが[GlobalData instance] .searchFiltersと同じ場所を指していますが、同じポインタではありません。作成したものはエイリアスです。

したがって、searchFilters = nilは、作成したエイリアスにnilを割り当てているため、元のポインタは変更されません。

これはCの場合と同じ動作です:)

+0

元の値を無効にするためにエイリアスを使用したいと思います。出来ますか。 私は試した* searchFilters = null;また失敗する。 – mkto

+0

エイリアスを無効にしてポインタを無効にすることはできません。エイリアスは完全に別のポインタです。 * searchFilters = null searchFiltersで値ポインタに "null"を代入するだけです。 IIRCでは、Obj-Cにはnullがありません。 –

0

あなたが同じオブジェクトを指す2つの異なるポインタを持っています。オブジェクトがシングルトンであるという事実は、何の違いもありません。同じ値を共有する異なる変数です。同様に:

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

私は完全にurの例を理解することができます。この例では、bはポインタではありません。私は私のsearchFiltersはポインタだから私はこのポインタを使用して元の値を変更する権利を持っている必要があります...しかし、ポインティング値からデータをコピーした可変コンテナのようなものです... – mkto

関連する問題