IBOutlet
deve ser forte, por razões de desempenho. Consulte Referência do Storyboard, IBOutlet forte, Base de cena no iOS 9
Conforme explicado neste parágrafo, as saídas para as subviews da visualização do controlador de exibição podem ser fracas, porque essas subviews já pertencem ao objeto de nível superior do arquivo nib. No entanto, quando uma saída é definida como um ponteiro fraco e o ponteiro é definido, o ARC chama a função de tempo de execução:
id objc_storeWeak(id *object, id value);
Isso adiciona o ponteiro (objeto) a uma tabela usando o valor do objeto como chave. Essa tabela é chamada de tabela fraca. O ARC usa esta tabela para armazenar todos os indicadores fracos do seu aplicativo. Agora, quando o valor do objeto for desalocado, o ARC iterará sobre a tabela fraca e definirá a referência fraca como nulo. Como alternativa, o ARC pode chamar:
void objc_destroyWeak(id * object)
Em seguida, o objeto não é registrado e objc_destroyWeak chama novamente:
objc_storeWeak(id *object, nil)
Essa contabilidade associada a uma referência fraca pode levar de 2 a 3 vezes mais do que a liberação de uma referência forte. Portanto, uma referência fraca introduz uma sobrecarga para o tempo de execução que você pode evitar, simplesmente definindo saídas como fortes.
A partir do Xcode 7, sugere strong
Se você assistir a sessão 407 da WWDC 2015 Implementando designs de interface do usuário no Interface Builder , sugere (transcrição de http://asciiwwdc.com/2015/sessions/407 )
E a última opção que quero destacar é o tipo de armazenamento, que pode ser forte ou fraco.
Em geral, você deve fortalecer sua tomada, especialmente se estiver conectando uma tomada a uma subvisualização ou a uma restrição que nem sempre será mantida pela hierarquia da visualização.
O único momento em que você realmente precisa tornar uma saída fraca é se você tiver uma exibição personalizada que faça referência a algo que faça backup da hierarquia da exibição e, em geral, isso não seja recomendado.
Então, eu vou escolher forte e clicarei em conectar, o que gerará minha saída.
IBOutletCollection()
não deve serweak
, caso contrário, ele retornará comonil
.