Указатель на недвижимость в синглтоне - PullRequest
0 голосов
/ 01 июля 2011
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», используя указатель * searchFilters, я могу указать на этот словарь и правильно прочитать его значения, но, если я хочу изменить его значение, используйте код вроде «searchFilters =nil 'не будет изменять значение в глобальном синглтоне вообще.

Мне нужен ярлык для [экземпляра GlobalData] .searchFilters, чтобы мне не нужно было каждый раз повторно вводить «[GlobalData instance] .searchFilters».... будь то указатель, указатель на указатель, что бы я ни хотел знать, есть ли ват, чтобы быстрее обратиться к этому свойству в синглтоне.

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Ваш указатель searchFilters указывает на то же местоположение, что и [экземпляр GlobalData] .searchFilters, но это не тот же указатель, что вы создали псевдоним.

Так что searchFilters = nil назначает nil для созданного вами псевдонима, исходный указатель остается нетронутым.

Это то же поведение, что и в C:)

0 голосов
/ 01 июля 2011

У вас есть два разных указателя, указывающих на один и тот же объект. Тот факт, что объект является одиночным, не имеет значения - это разные переменные, которые просто имеют одинаковое значение. Точно так же:

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

a и b - абсолютно разные переменные, независимые друг от друга, даже если они оба изначально содержали значение 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...