Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

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

13.10.2014, 12:49. Просмотров 794. Ответов 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):

Указатель на функцию с параметрами
Добрый день. есть описание следующей функции -...

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

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

Двойной указатель на объект класса
Подскажите что означает следующее определение объекта класса. A **myA; ...

Двойной указатель - Правильно выполнить присваивание
Ребят, помогите правильно выполнить присваивание int pop(struct stack **st) {...

Для чего нужен двойной указатель?
Нужно качественное объяснение для чего нужен двойной указатель? Где он...

3
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
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 / 6
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2014, 11:11
Привет! Вот еще темы с решениями:

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

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как...

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

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


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

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

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