可能重复:
Are @property(nonatomic)ivar @property(nonatomic,assign)ivar the same or different?
我在许多使用委托代码的类中看到过使用此关键字而不是保留。
我们使用assign而不是retain。
我可以使用分配给myclass ivar。
如果我这样做那么它的含义是什么?
答案 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只分配数据源和委托。你应该在课堂上做同样的事情。