我是符合 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 了解协议实现

UIAlertViewDelegate 的 clickedButtonAtIndex 后崩溃,消息 [MPMoviePlayerViewController isKindOfClass:]: 消息发送

实现我自己的委托时未调用 UIAlertViewDelegate 方法 clickedButtonAtIndex

UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法

UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法