Я опытный разработчик iOS, и я решил попробовать свои силы в разработке AppKit. Есть несколько настроек, которые я делаю API-мудрой, но в остальном я нахожу разработку OS X, скажем так, "знакомой".
Я создавал пользовательские интерфейсы AppKit в Interface Builder и замечал, что когда я использую редактор WYSIWYG для создания свойств в своих файлах кода, Apple создает следующее:
@property (assign) IBOutlet NSTableView *tableView;
Я нахожу это очень любопытным, потому что способ делать вещи в iOS по умолчанию привел бы меня к этому:
@property (nonatomic, retain) IBOutlet NSTableView *tableView;
Я понимаю, что в разработке Mac у меня нет одинаковых ограничений памяти, которые я делаю на мобильных устройствах, где представление может быть выгружено, и может возникнуть необходимость в сильных ссылках на элементы пользовательского интерфейса.
В случае AppKit я вполне могу предположить, что мои элементы пользовательского интерфейса всегда будут там, если я не буду возиться с иерархией представлений и удалить их из родительского представления. Казалось бы, разумно иметь сильную ссылку во все времена, чтобы предостеречь от непреднамеренного доступа к оборванным указателям.
Почему Apple создает здесь слабую ссылку, а не сильную?
Я настраиваю себя на какие-то непреднамеренные последствия, используя сильные ссылки (но правильно выпуская в dealloc
)? Есть ли какой-то шаблон, который мне не хватает?