Estou navegando no maravilhoso blog mantido por Scott Stevenson e estou tentando entender um conceito fundamental do Objective-C de atribuir delegados a propriedade 'assign' property vs 'reter'. Observe que os dois são iguais em um ambiente de coleta de lixo. Estou principalmente preocupado com um ambiente não baseado em GC (por exemplo, iPhone).
Diretamente do blog de Scott:
"A palavra-chave assign irá gerar um setter que atribui o valor diretamente à variável de instância, em vez de copiá-lo ou retê-lo. Isso é melhor para tipos primitivos como NSInteger e CGFloat, ou objetos que você não possui diretamente, como delegados".
O que significa que você não é o proprietário direto do objeto delegado? Normalmente retiro meus delegados, porque, se não quero que eles desapareçam no abismo, reter cuidará disso para mim. Normalmente, abstraio o UITableViewController do seu respectivo dataSource e também delego. Também guardo esse objeto em particular. Quero garantir que ele nunca desapareça, para que meu UITableView sempre tenha seu representante por perto.
Alguém pode explicar melhor onde / por que estou errado, para entender esse paradigma comum na programação do Objective-C 2.0 de usar a propriedade assign nos delegados em vez de reter?
Obrigado!