ios – 代表 – 保留或分配 – 发布?

ios – 代表 – 保留或分配 – 发布?,第1张

概述我看过一些与代表有关的帖子,我想知道参考它们的正确方法.假设我有一个声明如下的对象: @interface MyViewController : UITableViewController { id delegate; }@property (nonatomic, retain) id delegate;@end 通过MyViewController的生命周期,它将调用其代理的 我看过一些与代表有关的帖子,我想知道参考它们的正确方法.假设我有一个声明如下的对象: @H_502_2@@interface MyVIEwController : UItableVIEwController { ID delegate; }@property (nonatomic,retain) ID delegate;@end

通过MyVIEwController的生命周期,它将调用其代理的方法以响应与用户的交互.

当它是时候摆脱MyVIEwController的一个实例时,是否需要在实现的dealloc方法中释放代理ivar,因为它被声明为retain?

或者反过来呢,是否应该授权呢?也许应该是@property(非原子,分配)ID委托?根据Apple’s docs:

retain … You typically use this attribute for scalar types such as NSInteger and CGRect,or (in a reference-counted environment) for objects you don’t own such as delegates.

通常我只是去跟文档说的一样,但是我看到很多代码被保留在代理上.这只是“糟糕的代码”吗?我在这里推荐专家吗?处理这个问题的正确方法是什么?

解决方法 您通常希望分配代理而不是保留它们,以避免对象A保留对象B并且对象B保留对象A的循环保留计数.(您可能会看到这被称为保留代理的“弱引用”).例如,考虑以下常见模式: @H_502_2@-(voID)someMethod { self.utilityObject = [[[bar alloc] init] autorelease]; self.utilityObject.delegate = self; [self.utilityObject doSomeWork];}

如果utilityObject和delegate属性都使用retain声明,那么self现在保留self.utilityObject,self.utilityObject保留self.

有关更多信息,请参阅Why are Objective-C delegates usually given the property assign instead of retain?.

如果你分配代理而不是保留它,那么你不需要担心在dealloc中释放它.

总结

以上是内存溢出为你收集整理的ios – 代表 – 保留或分配 – 发布?全部内容,希望文章能够帮你解决ios – 代表 – 保留或分配 – 发布?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1112525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存