For*_*est 16 delegates properties retain ios assign
对于iOS开发人员,代理几乎无处不在.
似乎我们需要使用"assign"而不是像这样保留一个委托
@property(assign) id delegate;
Run Code Online (Sandbox Code Playgroud)
原因是避免循环循环问题为什么Objective-C委托通常给予属性赋值而不是保留?
我看到很多代码,他们仍然使用"保留".所以这里的问题是,如果我们使用retain作为委托,我们仍会得到循环循环问题吗?
谢谢
vfn*_*vfn 26
该文件说:
保留对象会创建强引用,并且在释放所有强引用之前无法释放对象.如果两个对象彼此保留,则两个对象都不会被释放,因为它们之间的连接不能被破坏
作为示例,让我们考虑一个实现UITableViewDelegate协议的UITableViewController.UITableView由它的视图控制器保留,尽管UITableView不保留它的委托.
如上文所述,UITableViewController只有在释放所有强引用时才会完成释放.由于具有UItableViewController作为委托的UITableView不保留它,当UItableViewController的所有者调用release时,保留计数将变为零并且将调用dealloc方法.
现在假设UITableView保留其委托.UITableViewController的保留计数至少为+2.一个是它的拥有者,另一个是UITableView.当UITableViewController的所有者在其上调用release时,保留计数将变为+1,并且不会像预期的那样变为零,因此在保留计数达到零之前不会调用dealloc方法.要达到零,UITableViewController将需要释放其UITableView,然后释放其委托(UITableViewController).因为UITableViewController只会在释放时释放它的视图(UITableView),因为保留计数不会低于+1.
(我们不考虑内存警告和任何其他可能的情况......我刚看到ViewController/View不是这个例子的最佳选择,但我已经写了太多.:))
那有意义吗?
| 归档时间: |
|
| 查看次数: |
24484 次 |
| 最近记录: |