Декларация о свойствах и автоматическое резервирование хранилища

Я пытаюсь понять свойства Objective-C, и у меня есть некоторые затяжные вопросы об их синтаксисе.

В чем разница между явным объявлением ivar для такого свойства:

@interface myObject1 : NSObject { NSString *title; } @property (copy) NSString *title; @end 

и это:

 @interface myObject2 : NSObject { } @property (copy) NSString *title; @end 

Кажется, что работает пример myObject2. Можно ли реализовать свойства, как в myObject2, или должен быть явно определен связанный ivar?

Каковы последствия неявного объявления ivar?

В современной среде выполнения Objective C (nonfragile-abi) они одинаковы, поддержка ivar будет автоматически создаваться в объявлении @synthesize. Это среда выполнения, используемая iPhone, и 64-битные приложения Mac OS X. 32-разрядная версия Mac OS X использует устаревшую среду исполнения, где невозможно синтезировать ivar, а второй бит написанного вами кода не будет правильно компилироваться.

Самые последние версии симулятора iPhone используют современную среду исполнения, но более старые – нет. Поэтому, хотя оба примера кода будут работать на фактически iPhone (синтезируя необходимое хранилище), второй пример не будет скомпилирован для симулятора, если у вас нет обновленного Xcode.

С современной средой выполнения они одинаковы (как уже упоминалось), за исключением того факта, что ивары, которые явно не определены как в MyObject1, не будут отображаться в отладчике при просмотре переменных или наведении указателя мыши на переменные, вам нужно распечатать выведите значения переменных или установите сводку переменной в представлении переменных, чтобы отобразить свойства.

Я начал использовать способ MyObject2 делать что-то из-за ввода меньше, но более раздражает необходимость вводить командную строку gdb для просмотра состояния переменной в отладчике 🙁

  • Сохранение UIColor и загрузка из NSUserDefaults
  • Можно ли отключить плавающие заголовки в UITableView с помощью UITableViewStylePlain?
  • Сортировка NSArray пользовательских объектов по их свойствам NSDate
  • Как кодировать Base64 на iPhone
  • Что означает подчеркивание в имени переменной-члена в Objective-C?
  • Лучший способ удалить из NSMutableArray во время итерации?
  • iPhone: настройка заголовка панели навигации
  • Как я смогу удалить объекты из NSMutableArray?
  • Почему я не должен использовать Objective C 2.0-аксессоры в init / dealloc?
  • как сделать программный снимок экрана для iPhone?
  • Core-Data iPhone: не удалось найти NSManagedObjectModel
  • Давайте будем гением компьютера.