关于iphone:什么是差异。

what is diff. b/w @property (nonatomic,assign) and @property (nonatomic,retain)

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Are @property(nonatomic)ivar @property(nonatomic,assign)ivar the same or different?

我在许多使用委托的类中看到过,委托使用这个关键字assign而不是retain。

我们用分配代替保留。

我可以用assign给我的班级ivar吗?

如果我喜欢的话,那它的意思是什么?


您应该分配(=retain count中没有变化)委托,因为您希望避免"retain loops"(无法想到更好的单词)

采用uiTableView和uiViewController。

当你把UITababVIEW添加到你的VIEW控制器中时,你会保留它。然后,将委托和数据源(也是委托)分配给UITababVIEW。通常这是你的VIEW控制器。

如果TabLVIEW保留数据源(VIEW Controller),将有一个"保留循环"。

ViewController保留TableView。TableView保留视图控制器

永远不会调用viewcontrollers dealloc(释放tableview的地方),因为tableview永远不会释放viewcontroller。另一方面。

因此,两者都不会被交易。这就是为什么UITableView只分配数据源和委托。你在课堂上也应该这样做。


这些关键字的含义与属性实现的内存管理相关:

  • retain:对象将保留其属性的新值集,并释放旧值
  • copy:对象将复制新值,并释放旧值。
  • assign:对象不会对其属性值进行任何内存管理。

请参见Objective-C语言文档中的"setter语义"。

在自动引用计数方案中,使用以下内存管理关键字:

  • strong:对象对其属性保持强(即拥有)引用。
  • weak:对象对其属性保持零弱引用