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.

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.