Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using ARC, lifetime qualifier assign and unsafe_unretained

i'm a little confused about these two qualifiers... With ARC instead of using weak (i.e. if I need support iOS 4) I can use unsafe_unretained losing the auto-nil features... the final result seems to be similar to assign.

  • Can I exchange unsafe_unretained with assign ?
  • Are these qualifiers the same thing ?

It would be really interesting any link of Apple documentation on this argument... I can find only a few rows here

like image 494
MatterGoal Avatar asked Dec 06 '11 09:12

MatterGoal


1 Answers

Clang's technical specification of ARC goes into much more detail about how the qualifiers work.

But, to answer your question: assign and __unsafe_unretained are not the same thing. assign is a property attribute that tells the compiler how to synthesise the property's setter implementation, while __unsafe_unretained is an ownership qualifier that tells ARC how to insert retain/release calls. But they are related: when declaring a property, assign implies __unsafe_unretained ownership.

Prior to ARC, assign was the default property ownership qualifier; but with ARC enabled, the default for retainable object pointer types is strong. (For scalars and other pointer types, assign is still the default.)

like image 93
一二三 Avatar answered Sep 19 '22 19:09

一二三