发布UIAlertViewDelagate

时间:2011-02-16 18:24:00

标签: iphone objective-c

我有一个需要处理大量UIAlertViews的视图控制器,所以理想情况下我不想将委托设置为self,并且在警报视图上使用标签处理所有内容 - 除非这是首选方法。

如果我创建一个实现UIAlertViewDelegate的类,我在哪里/如何安全地释放它?

-(void)myMethod {
    MyUIAlertViewDelegate *myDelegate = [[MyUIAlertViewDelegate alloc] init];
    UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle ... delegate:myDelegate ...
    [myAlertView show];
    [myAlertView release];

}

有哪些建议可用于创建此类自定义委托?

3 个答案:

答案 0 :(得分:1)

我不确定你能从中获益。您是否为每个警报视图创建了一个新的类实例?这对我来说似乎是不必要的开销。但是,使用标签不一定非常麻烦;只需使用委托方法调用其他方法来执行您想要的操作:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    switch ([alertView tag]) {
        case kWidgetATag:
          [self doSomethingForWidgetA];
        case kWidgetBTag:
          [self doSomethingForWidgetB];
    }
}

答案 1 :(得分:0)

我认为释放视图控制器的最佳方法是使用名为last的方法:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    [self release];
}

答案 2 :(得分:0)

拥有一个仅用于处理UIAlertView方法的类似乎很奇怪。

通常,某些视图控制器会直接关注UIAlertView结果的结果。该视图控制器将实现UIAlertViewDelegate协议,创建并呈现UIAlertView(设置委托给自己),然后接收其委托消息。

ViewController将根据需要更新View或Model关注点。