Я знаю какой-то механизм подключения розетки при загрузке NIB, но я не уверен. Поэтому я задаю несколько вопросов, чтобы убедиться в моих знаниях. Я предположил, что все это правда, но трудно найти упоминание об этом в справочной документации. Пожалуйста, указывайте неправильные и правильные вещи.
У меня есть IBOutlet, определенный следующим образом: (Конечно, это не рекомендуется)
@implementation
{
IBOutlet id var1;
}
@end
- Загрузчик NIB (alloc | retain) и автоматический выпуск всех объектов верхнего уровня. Таким образом, он будет освобожден на концах хода runloop без дополнительного сохранения.
- Подключение IBOutlets осуществляется с помощью KVC.
- KVC в основном использует метод доступа.
- KVC вторично использует setValue: forKey. И IBOutlet будет обрабатываться этим методом, потому что нет объявленного свойства или метода доступа.
- setValue: forKey сохраняет объект нового значения.
- setValue: forKey освобождает старый объект значения.
- Таким образом, объект верхнего уровня, подключенный к IBOutlet, будет сохранен один раз. Таким образом, я должен выпустить его в dealloc. Вот почему я должен освобождать объекты, подключенные к IBOutlet, по методу dealloc.
- Если объект подключен к другому IBOutlet, такому как IBOutlet, он должен быть освобожден еще раз для освобождения.