@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.
通常我只是去跟文档说的一样,但是我看到很多代码被保留在代理上.这只是“糟糕的代码”吗?我在这里推荐专家吗?处理这个问题的正确方法是什么?
解决方法
-(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中释放它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。