什么是差异。 b / w @property(非原子,赋值)和@property(非原子,保留)

时间:2011-03-18 13:36:22

标签: iphone objective-c cocoa cocoa-touch xcode

  

可能重复:
  Are @property(nonatomic)ivar @property(nonatomic,assign)ivar the same or different?

我在许多使用委托代码的类中看到过使用此关键字而不是保留。

我们使用assign而不是retain。

我可以使用分配给myclass ivar。

如果我这样做那么它的含义是什么?

2 个答案:

答案 0 :(得分:6)

这些关键字的含义与财产实施的内存管理有关:

  • retain:对象将为其属性保留一个新的值集,并将释放旧值
  • copy:对象将获取新值的副本,并将释放旧值
  • assign:对象不会对其属性值进行任何内存管理。

请参阅Objective-C语言文档中的"setter semantics"

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

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

答案 1 :(得分:6)

你应该分配(=保留计数没有变化)代表,因为你想避免“保留循环”(想不出更好的词)

使用UITableView和UIViewController。

当您将UITableView添加到viewController时,您会保留它。然后,您将一个委托和一个数据源(也是一个委托)分配给您的UITableView。通常这是你的viewController。

如果tableview将保留数据源(你的viewController),那么会有一个“保留循环”

viewontroller保留了tableview tableview保留了viewcontroller

viewcontrollers dealloc(你发布tableview的地方)永远不会被调用,因为tableview永远不会释放你的viewcontroller。反过来说。

因此,这两者都不会被取消分配。这就是为什么UITableView只分配数据源和委托。你应该在课堂上做同样的事情。