Какая разница между "слабым" и "назначать" в объявлении свойства делегата

В чем разница между этим:

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

и это:

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

Я хочу использовать свойство для делегатов.

Ответ 1

Единственное различие между weak и assign заключается в том, что если объект a weak указывает на то, что объект освобожден, то значение указателя weak будет установлено на nil, так что вы никогда не будете риск заражения мусором. Если вы используете assign, этого не произойдет, поэтому, если объект будет освобожден из-под вас, и вы попытаетесь получить к нему доступ, вы получите доступ к мусору.

Для объектов Objective-C, если вы находитесь в среде, где вы можете использовать weak, вы должны ее использовать.