Qual é a diferença entre 'fraco' e 'atribuir' na declaração de propriedade delegada

87

Qual é a diferença entre isso:

@property (nonatomic, weak) id  <SubClassDelegate> delegate; 

e isto:

@property (nonatomic, assign) id  <SubClassDelegate> delegate; 

Quero usar propriedade para delegados.

Firdous
fonte

Respostas:

153

A única diferença entre weake assigné que se o objeto para o qual uma weakpropriedade aponta for desalocado, o valor do weakponteiro será definido como nil, para que você nunca corra o risco de acessar o lixo. Se você usarassign , isso não acontecerá, então se o objeto for desalocado de você e você tentar acessá-lo, você acessará o lixo.

Para objetos Objective-C, se você estiver em um ambiente em que possa usar weak, você deve usá-lo.

yuji
fonte
16
Você sabe por que algumas das classes do framework Cocoa Touch ainda usam atribuição para delegados? Por exemplo, o delegado de UISearchDisplayController ainda está atribuído. Por que nunca foi atualizado?
Pwner
@Pwner parece que foi descontinuado no iOS 8.0
Stavash
Aqui está um exemplo não obsoleto: até mesmo UITableViewtem assignpara seu delegado:@property (nonatomic, assign) id <UITableViewDelegate> delegate;
Chris Nolet
3
@ChrisNolet Porque provavelmente eles ainda estão usando o MRC (contagem manual de referência) internamente.
Marco Sero,
2
A partir de hoje, o exemplo do delegado UITableView é: @property (nonatomic, fraco, anulável) id <UITableViewDelegate> delegado; Portanto, esse não é mais um exemplo válido.
sdoowhsoj