Por que não há necessidade de lançar uma tomada que está configurado com “Atribuir”?

StackOverflow https://stackoverflow.com/questions/805892

Pergunta

Estive lendo que se eu tiver algo como isto:

@property (nonatomic, assign) UIView *anView;

Então eu não precisa se preocupar com o gerenciamento de memória. Eu não tenho que fazer [a liberação anView] no método -dealloc.

Por quê?

"Atribuir" apenas diz o compilador: "Ei, cara, esta propriedade não reter quaisquer cessionários ninguém para isso." E então você pode fazer

@synchronize anView;

eo compilador magicamente cria um getter e setter, onde o setter pode apenas parecer que:

- (UIView*) anView {
    return anView;
}

eo Setter pode ser parecido com:

- (void) setAnView:(UIView*)newAnView {
    anView = newAnView;
}

certo / errado? Se isso fosse certo, o setter não reivindica a propriedade da variável newAnView, uma vez que não é um "reter" propriedade. Ele só tem isso e atribui à variável de instância. Então, quando se considera a política de propriedade, não há necessidade para liberar a variável de instância anView na -dealloc. O objeto não ele próprio. Ist correto?

Foi útil?

Solução

Sim, você está basicamente correta. Vamos supor que o coletor de lixo está fora (caso contrário, não importa de qualquer maneira).

Ao usar propriedades 'Atribuir', você não tem que liberar o objeto porque você nunca manteve-lo (alguém da responsabilidade).

Essencialmente, isso cria uma referência fraca - anView pode ser desalocada enquanto a propriedade ainda aponta para ele. Normalmente, você usaria 'Atribuir' para os tipos de dados primitivos, não para objetos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top