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

rit*_*hik 0 iphone xcode cocoa cocoa-touch objective-c

可能重复:
@property(非原子)ivar @property(非原子,分配)ivar是相同还是不同?

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

我们使用assign而不是retain.

我可以使用赋予myclass ivar.

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

小智 6

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

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

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

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

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


Mat*_*uch 6

您应该分配(=保留计数没有变化)委托,因为您要避免"保留循环"(想不出更好的单词)

拿一个UITableView和一个UIViewController.

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

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

viewontroller保留tableview.
tableview保留了viewcontroller

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

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