Existem dois novos atributos de gerenciamento de memória para propriedades introduzidas pelo ARC strong
e weak
.
Além de copy
, o que obviamente é algo completamente diferente, existem diferenças entre strong
vs retain
e weak
vs assign
?
Pelo meu entendimento, a única diferença aqui é que weak
será atribuída nil
ao ponteiro, enquanto assign
não será, o que significa que o programa falhará quando eu enviar uma mensagem ao ponteiro depois que ele for lançado. Mas se eu usar weak
, isso nunca acontecerá, porque o envio de mensagens para nil
não fará nada.
Eu não sei sobre nenhuma diferença entre strong
e retain
.
Existe alguma razão pela qual devo usar assign
e retain
em novos projetos ou o tipo de depreciação?
weak
e strong
) e 4 qualificadores vida variáveis ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
). Veja as notas do ARC abaixo.
assign
ao compilar com o ARC era um erro. Existem muitas respostas excluídas sobre isso. Parece que foi alterado antes do lançamento final. unsafe_unretained
é o atributo preferido para muitos de nós que adotamos cedo. Para provar que unsafe_unretained
é um atributo válido, consulte "Programação com objetivo-C" da Apple, na seção "Encapsulando dados", na sub-rubrica "Use referências não seguras e não retidas para algumas classes". O que diz: "Para uma propriedade, isso significa usar o atributo unsafe_unretained:"
strong
,weak
eunsafe_unretained
.