IBOutlet
повинні бути сильними, з причини виконання. Див. Довідку про розгорнуту дошку, сильний IBOutlet, док-станцію для iOS 9
Як пояснено в цьому пункті, випускні пункти для підвідних оглядів контролера перегляду можуть бути слабкими, оскільки ці підперегляди вже належать об'єкту верхнього рівня файлу nib. Однак, коли Outlet визначено як слабкий покажчик і встановлено покажчик, ARC викликає функцію виконання:
id objc_storeWeak(id *object, id value);
Це додає вказівник (об’єкт) до таблиці, використовуючи значення об’єкта як ключ. Ця таблиця називається слабкою. ARC використовує цю таблицю для зберігання всіх слабких покажчиків вашої програми. Тепер, коли значення об'єкта буде розміщено, ARC переправиться на слабку таблицю і встановить слабке посилання на нуль. Альтернативно, ARC може телефонувати:
void objc_destroyWeak(id * object)
Потім об'єкт не зареєстрований і objc_destroyWeak знову викликає:
objc_storeWeak(id *object, nil)
Таке ведення бухгалтерського обліку, пов’язане зі слабким посиланням, може зайняти в 2-3 рази довше, ніж випуск надійного посилання. Отже, слабке посилання вводить накладні витрати на час виконання, яких можна уникнути, просто визначивши торгові точки як сильні.
Що стосується Xcode 7, це говорить strong
Якщо ви переглядаєте сесію WWDC 2015 407 Впровадження дизайнів інтерфейсу в Builder інтерфейсу , це пропонує (стенограма з http://asciiwwdc.com/2015/sesions/407 )
І останній варіант, який я хочу зазначити - це тип зберігання, який може бути сильним або слабким.
Як правило, ви повинні зробити вашу розетку сильною, особливо якщо ви підключаєте розетку до підподання або обмеження, яке не завжди буде зберігатися ієрархією перегляду.
Єдиний раз, коли вам дійсно потрібно зробити розетку слабкою, це якщо у вас є власний перегляд, який посилається на щось резервне копіювання ієрархії перегляду, і взагалі це не рекомендується.
Тож я виберу сильний і натискаю на підключення, що генерує мою розетку.
IBOutletCollection()
не повинно бутиweak
, інакше вона повертається якnil
.