Я столкнулся с незнакомым поведением.
Я искал в Интернете, а точнее на StackOverflow, и нашел много статей и постов о свойствах только для чтения.
Я чувствую, что есть огромный и невидимый опыт обучения, касающийся процесса компиляции и назначения/декларации/инициализации.
Я действительно хочу ясно понять эти ситуации.
Представьте, что у меня есть недвижимость
@property (nonatomic, strong) CLLocation *location;
Я сохранил в своем NSUserDefault
последнее известное местоположение пользователя в виде строки.
Если я хочу установить координату моего свойства местоположения с помощью моего lastLocation, у меня возникает ошибка компиляции:
Назначение свойства только для чтения
Вот моя строка кода:
_location.coordinate = [[MyCustomUserDefaults lastLocation] doubleValue];
Вот мой геттер NSUserDefaults:
+(NSString *) lastLocation
{
return [[NSUserDefaults standardUserDefaults] objectForKey:USER_PREF_LAST_LOCATION];
}
CLLocationCoordinate2D
когда-либо будет обновлено, чтобы использовать вместо него числа с плавающей запятой, или будут добавлены дополнительные свойства? Использование инициализатораCLLocation
, который принимает два конкретных типа, намного безопаснее и перспективнее. - person Craig Otis   schedule 05.04.2017[NSValue value:&myLC2Dstruct withObjCType:@encode(CLLocationCoordinate2D)]
. Я на 100% согласен с вами в отношении соблюдения целостности объекта (даже если это гражданин второго сорта, такой как структура), поэтому у меня немного аллергия на разбиение объекта (или структуры) на несколько компонентов (даже если они являются параметрическими) для сериализации. - person danh   schedule 05.04.2017NSSecureCoding
(который реализуетCLLocation
), то конечно, но запись байтов с диска в указатель, который, вероятно, изменился с течением времени, кажется действительно рискованным. Имейте в виду, чтоNSUserDefaults
предназначен для более длительного хранения, а не только для одного запуска приложения. Вы должны признать - если пользователь работает под управлением iOS 7, сохраняетCLLocation
по умолчанию, а затем перезагружает его в iOS 8 - есть большая вероятность, что он выйдет из строя во время выполнения - инициализатор этого не сделает. - person Craig Otis   schedule 05.04.2017