通过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 – 代表 – 保留或分配 – 发布?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)