iOS5 @property发生了变化

Geo*_*dis 6 iphone properties ios ios5 automatic-ref-counting

在iOS 5中,不再支持"保留"和"发布".相反,"强"和"弱"是新的方式.

iOS 4代码:

@property(nonatomic, retain)
@property(nonatomic, assign)
Run Code Online (Sandbox Code Playgroud)

iOS 5代码:

???
???
Run Code Online (Sandbox Code Playgroud)

小智 12

"在iOS 5中,不再支持retain release." 它们只是在使用ARC时.

使用ARC时,-[<NSObject> retain]是无操作.

对于属性,strong如果使用ARC ,则可以使用,但这不是必需的(retain如果您愿意,也可以使用).strong并且retain完全相同:

@property(nonatomic, strong)
@property(nonatomic, assign)
Run Code Online (Sandbox Code Playgroud)

只要确保你是一致的(不要同时使用strong,并retain在同一项目).

  • "当使用ARC时, - [<NSObject> retain]是一个无操作." 发送`-retain`消息是编译时错误,因为编译器为您插入这些保留和释放,所以它实际上不是无操作.另外,`assign`已被`unsafe_unretained`和`weak`取代.对于面向iOS 5.0+的应用程序,建议使用`weak`.您可以对旧应用程序使用`unsafe_unretained`,但正如其名称所暗示的那样,它不像自动`nil`-ing弱属性那样安全. (5认同)

Osc*_*mez 5

他们是不完全一样,但基本上retain := strongassign := weak 我建议采取看看ARC发布说明

  • 实际上,`assign`更接近`unsafe_unretained`而不是`weak`.弱财产分配是一个新概念. (3认同)
  • 另请注意,weak不适用于诸如int之类的基本类型.你必须使用assign. (2认同)