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