1) Вы немного неправильно поняли @synthesize.@synthesize ничего не делает с объектом.Он только указывает компилятору генерировать методы getter и setter в соответствии с параметрами, используемыми в объявлении @property
// Синтезирование IBOutlets в iOS приведет к тому, что они будут
//сохраняется, когда они создаются пером
розетки не сохраняются (розетки являются просто уведомлениями для конструктора интерфейса и не влияют на код), * 1011 *объекты сохраняются, когда используется сеттер, сгенерированный @synthesize.Когда перо загружено, система загрузки вызывает ваш сгенерированный установщик.
2) Решение о том, использовать ли средства доступа в задаче C, ничем не отличается от решения использовать средства доступа в любом другом объектно-ориентированном языке.Это выбор стиля, потребности и надежности.То, что метод доступа служит в качестве IBOutlet, не имеет значения.
Но в объективном CI следует предложить НЕ использовать методы доступа в двух местах: dealloc и в самом методе доступа var.
И есливы используете аксессоры в init, тогда вам нужно быть внимательным к своим счетам хранения.
self.myString = [[NSString alloc] initWithString:@"myString"];
Эта строка приводит к утечке памяти.Использование вашего средства доступа к копии сохраняет объект, поэтому вы должны освободить его здесь после его создания.
3) Не уверен, что вы подразумеваете под суетой.Возможно см. Ответ на 2)
4) См. 2) и будьте осторожны с управлением памятью.Если вы вызываете alloc / init, теперь вы отвечаете за освобождение объекта - это полностью независимо от удержаний / выпусков, используемых аксессорами и dealloc.
5) Нет, вы не должны обнулять другие переменные экземпляра в viewDidUnload.Ожидается, что ваш контроллер будет поддерживать свое состояние, даже если представление исчезнет.viewDidUnload предназначен только для очистки потенциально опасных объектов просмотра, когда представление контроллера в данный момент не отображается на экране.
Рассмотрим контроллер навигации.Контроллер вида 1 находится в стеке, а затем контроллер вида 2 толкается и становится видимым.Если условия памяти становятся низкими, система может попытаться выгрузить представление контроллера представления 1 и затем вызовет viewDidUnload.
Тогда контроллер представления 2 с выталкиванием больше не будет создавать объект контроллера представления 1, но будет загружать контроллер представления 1view и вызов viewDidLoad.
Re comments
2) Совершенно верно - вы можете использовать вспомогательный конструктор или освобождение сразу после выделения, инициализации и назначения или выпускадо выхода из блока или автоматического выпуска.То, что вы выбираете, в основном зависит от стиля (хотя некоторые будут спорить с авто-выпуском, но не со мной!)
3) Есть средства доступа для скаляров - вы создали их в своем коде
@property (readwrite) BOOL myBOOL;
Это создает методы myBOOL и setMyBOOL для вашего класса.
Помните, что нет ничего особенного в точечной нотации.Это только для удобства, и когда код скомпилирован, myObject.property в точности эквивалентен [свойству myObject], а myObject.property = x в точности эквивалентен [myObject setProperty: x].Использование точечной нотации - это выбор стиля.