我是符合 UIAlertViewDelegate 协议的 NSObject - 释放自己合适吗?
Posted
技术标签:
【中文标题】我是符合 UIAlertViewDelegate 协议的 NSObject - 释放自己合适吗?【英文标题】:I'm an NSObject conforming to UIAlertViewDelegate protocol - is it appropriate to release myself? 【发布时间】:2011-03-29 20:35:47 【问题描述】:我有一个 NSObject (MyCustomObject) 的子类,它被实例化并调用以执行一些逻辑并决定是否显示 UIAlertView。 MyCustomObject 实现 UIAlertViewDelegate 协议来执行一些更多的逻辑并在 alertView:clickedButtonAtIndex: 中设置一些 NSUserDefaults。 哪里适合发布 myCustomObject?如果用户单击警报视图上的其中一个按钮后不再需要 myCustomObject,则 myCustomObject 可以在 alertView 中释放自身:didDismissWithButtonIndex: ?
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
NSLog(@"I'm UIAlertView's Delegate and I'm releasing myself");
[self release];
【问题讨论】:
【参考方案1】:我认为最好为自定义对象创建一个委托协议,然后让该对象的所有者成为它的委托。在您的类的警报视图委托方法中,向自定义委托发送消息,以便它可以处理释放您的自定义对象。
如果对象在调用代码中自动释放,或者调用代码尝试手动释放您的对象本身,尝试自我释放可能会产生意外行为甚至崩溃。
【讨论】:
BC,每当我这样做时,我都觉得自己像个可卡因上瘾者,也喝醉了。好乱啊…… “喂你,放开我好吗?”我不知道。 为什么不让它自我释放——如果它是一个独立的逻辑,为什么要构建额外的层来释放它? 感谢 BoltClock,您的技术也让静态分析器感到高兴(目前它认为我正在泄漏,因为调用代码没有释放 myCustomObject)。调用代码是一个视图控制器。将 myCustomObject 设置为 ivar 并在我的视图控制器的 dealloc 方法中释放它会更整洁吗?以上是关于我是符合 UIAlertViewDelegate 协议的 NSObject - 释放自己合适吗?的主要内容,如果未能解决你的问题,请参考以下文章
通过示例 UIAlertViewDelegate 了解协议实现
UIAlertViewDelegate 的 clickedButtonAtIndex 后崩溃,消息 [MPMoviePlayerViewController isKindOfClass:]: 消息发送
实现我自己的委托时未调用 UIAlertViewDelegate 方法 clickedButtonAtIndex