Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

Двойной указатель - Objective-C

13.10.2014, 12:49. Просмотров 694. Ответов 3
Метки нет (Все метки)

Все привет!

В процессе работы возникла у меня необходимость проверить одну фичу, для чего надо было по-быстрому накатать тестовый метод условного вида:
Objective-C
1
2
3
4
5
6
- (void)addSomeValueToDict:(NSDictionary *)dict
{
NSMutableDictionary *mutableCopy = [dict mutableCopy];
[mutableCopy setObject:@"Obj" forKey:@"Key"];
dict = mutableCopy;
}
В результате этой операции у меня мой dict изменялся только локально, внутри метода. А "снаружи", после выполнения этого метода кол-во его элементов не менялось.

Ступора не произошло, поменял входной параметр на NSDictionary ** с соответствующими сопроводительными коррективами и все завелось.

Но, тем не менее, окончательного понимания исправления у меня не появилось((
Ведь, используя (NSDictionary *)dict мы передаем указатель на объект. Следовательно, имея указатель, мы, по моему пониманию, можем изменять объект, как нам заблагорассудится (в голове сразу возникает стандартная сишная задачка из серии "поменяйте местами две переменные").
Почему в Objective-C необходимо передавать двойной указатель, чтобы выполнить такое действие?

Поясните, пожалуйста, буду очень благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2014, 12:49     Двойной указатель
Посмотрите здесь:

Указатель на функцию с параметрами - Objective-C
Добрый день. есть описание следующей функции - (void)requestFunc:(NSString *)urlString selector:(SEL)func; как его...

Двойной указатель - C++
Это не совсем C++ вроде, а просто C, но поясните, пожалуйста, зачем в коде в строчку **sums=NULL используется двойной указатель? ...

Двойной указатель - C++
for (i=0; i<N; i++) delete A; //Освобождение памяти для A delete A; Вопрос по синтаксису: для чего необходимо ставить в...

Двойной указатель на объект класса - C++
Подскажите что означает следующее определение объекта класса. A **myA; где - A имя класса, а myA его объект. Мне не понятно что...

Двойной указатель - Правильно выполнить присваивание - C (СИ)
Ребят, помогите правильно выполнить присваивание int pop(struct stack **st) { struct stack *temp = *st; *st = *st->next; //ошибка ...

Для чего нужен двойной указатель? - C (СИ)
Нужно качественное объяснение для чего нужен двойной указатель? Где он применяется? И покажите пример кода для обращения к двумерному...

Считывание одной строки, не используя в качестве аргумента функции двойной указатель - C (СИ)
Язык C начал изучать недавно. Хочу написать функцию считывания строки без ограничения на её длину. Т.е. вообще без ограничения, не считая...

Зачем нужен указатель на указатель при работе с однонаправленным списком? - C++
День добрый. Столкнулся с непониманием этой темы. В частности, совершенно непонятен алгоритм инициализации такого вот списка. Например:...

Если в класс нужно передать указатель на указатель на массив строк неизвестной длинны? - C++ Builder
Как проинициализировать массив строк wchar_t * (произвольного размера) , если его нужно передать в конструктор класса ? wchar_t *A1 =...

Дерево: почему в insert передается указатель на указатель? - C (СИ)
Осваиваю роботу с деревьями, и столкнулся с такой проблемой: не понимаю почему в insert передается указатель на указатель?почему нельзя...

Работа с неуправляемой памятью - указатель на указатель - C#
Доброго всем времени суток! Пишу ПО для работы с PCI-express картой, в качестве драйвера - Jungo WinDriver. Необходимо выделить...

Как записать константный указатель на указатель - C (СИ)
Добрый вечер. Вот данная запись говорит. Указатель на константный указатель типа Int. int * const * a; как записать? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
13.10.2014, 13:52     Двойной указатель #2
- (void)addSomeValueToDictNSDictionary *)dict
{
NSMutableDictionary *mutableCopy = [dict mutableCopy];
[mutableCopy setObject:@"Obj" forKey:@"Key"];
dict = mutableCopy;
}
на самом деле все намного проще. (NSDictionary *)dict уже должен быть "мутированным" (динамическим) чтобы данные в него можно было бы передать

Objective-C
1
2
3
4
- (void)addSomeValueToDict:(NSMutableDictionary *)dict
{
[dictsetObject:@"Obj" forKey:@"Key"];
}
Melzas
38 / 38 / 4
Регистрация: 20.07.2011
Сообщений: 88
13.10.2014, 15:25     Двойной указатель #3
Objective-C
1
dict = mutableCopy;
Это присвоение локальной переменной, которое никак не повлияет на исходный словарь, переданный в метод. Здесь замещается не содержимое по адресу указателя, а сам адрес.

Сам метод лишен смысла. Достаточно использовать NSMutableDictionary.
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
14.10.2014, 11:11  [ТС]     Двойной указатель #4
Цитата Сообщение от Melzas Посмотреть сообщение
Objective-C
1
dict = mutableCopy;
Это присвоение локальной переменной, которое никак не повлияет на исходный словарь, переданный в метод. Здесь замещается не содержимое по адресу указателя, а сам адрес.

Сам метод лишен смысла. Достаточно использовать NSMutableDictionary.
Вот блин, сам же только что говорил про указатели и "как поменять местами две переменные", а написал бред))
Спасибо всем.
Yandex
Объявления
14.10.2014, 11:11     Двойной указатель
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru