Essa resposta possui vários erros e também está desatualizada. Por favor, veja outras perguntas / respostas e os comentários.
Nonatomic
nonatomic
é usado para fins de multiencadeamento. Se tivermos definido o atributo não atômico no momento da declaração, qualquer outro encadeamento que deseje acessar esse objeto poderá acessá-lo e fornecer resultados com relação à multiencadeamento.
cópia de
copy
é necessário quando o objeto é mutável. Use isso se você precisar do valor do objeto como está neste momento e não desejar que esse valor reflita as alterações feitas por outros proprietários do objeto. Você precisará liberar o objeto quando tiver terminado porque está mantendo a cópia.
Atribuir
Assign
é um pouco o oposto de copy
. Ao chamar o getter de uma assign
propriedade, ele retorna uma referência aos dados reais. Normalmente, você usa esse atributo quando possui uma propriedade do tipo primitivo (float, int, BOOL ...)
Reter
retain
é necessário quando o atributo é um ponteiro para um objeto. O setter gerado por @synthesize
reterá (também conhecido como adicionar uma contagem de retenção) ao objeto. Você precisará liberar o objeto quando terminar. O uso de retenção aumentará a contagem de retenção e ocupará a memória no conjunto de liberação automática.
Forte
strong
é uma substituição do atributo reter, como parte da ARC (Contagem de referência automatizada do Objective-C). No código não-ARC, é apenas um sinônimo de retenção.
Este é um bom site para aprender sobre strong
e weak
para o iOS 5.
http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1
Fraco
weak
é semelhante, strong
exceto pelo fato de não aumentar a contagem de referência em 1. Ele não se torna proprietário desse objeto, mas apenas mantém uma referência a ele. Se a contagem de referência do objeto cair para 0, mesmo que você ainda esteja apontando para ele aqui, ela será desalocada da memória.
O link acima contém boas informações sobre fraco e forte.