Как указывалось в других сообщениях, вам нужно использовать NSNumber
, чтобы обернуть ваше двойное значение в объекте. Причина этого в том, что все классы базовых коллекций Какао предназначены для работы с объектами, а не с примитивными значениями. Как вы и предлагали, с некоторой работой вы могли бы фактически передать указатель на двойное значение (я думаю, если бы вам удалось привести его как указатель типа id
), но как только ваш метод завершился и удвоилось значение область будет освобождена, и ваш указатель теперь будет указывать на мусор. С объектом коллекция (NSDictionary
, в данном случае) сохранит ваш объект при добавлении и освободит его, когда он будет удален или коллекция будет dealloc
', гарантируя, что ваша ценность сохранится, пока она вам не понадобится больше.
Я бы сделал это следующим образом:
NSNumber *tempNumber = [[NSNumber alloc] initWithDouble:longitude];<br>
[data setValue:tempNumber forKey:@"longitude"];<br>
[tempNumber release];
Который оставит ваш объект NSNumber только с количеством ссылок +1 (словарь сохраняет его) и без авто-выпусков
Другой предложенный метод выполнения:
[data setValue:[NSNumber numberWithDouble: longitude] forKey:@"longitude"];
также будет работать нормально, но ваш объект получит +1 счетчик ссылок и авто-релиз из метода numberWithDouble. По возможности я стараюсь избегать авто-выпусков, но код более лаконичен. YMMV.