Форум программистов, компьютерный форум, киберфорум
Наши страницы

Objective-C

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

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

13.10.2014, 12:49. Просмотров 744. Ответов 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 необходимо передавать двойной указатель, чтобы выполнить такое действие?

Поясните, пожалуйста, буду очень благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2014, 12:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двойной указатель (Objective-C):

Указатель на функцию с параметрами - 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 (СИ)
Нужно качественное объяснение для чего нужен двойной указатель? Где он применяется? И покажите пример кода для обращения к двумерному...

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

3
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
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"];
}
0
Melzas
38 / 38 / 4
Регистрация: 20.07.2011
Сообщений: 88
13.10.2014, 15:25 #3
Objective-C
1
dict = mutableCopy;
Это присвоение локальной переменной, которое никак не повлияет на исходный словарь, переданный в метод. Здесь замещается не содержимое по адресу указателя, а сам адрес.

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

Сам метод лишен смысла. Достаточно использовать NSMutableDictionary.
Вот блин, сам же только что говорил про указатели и "как поменять местами две переменные", а написал бред))
Спасибо всем.
0
14.10.2014, 11:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2014, 11:11
Привет! Вот еще темы с ответами:

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

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Функция, принимающая указатель и число байт и выделяющая память под указатель - C++
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию, принимающую указатель и число байт и выделяющую память под...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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