1

我看到了一个视图控制器的代码,它实现了以下

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
 }

但我认为它需要声明使用<UIAlertViewDelegate>.

但是,我在视图控制器的头文件中找不到这个声明。

我想知道为什么代码可以响应事件?

4

3 回答 3

2

Cocoa 经常动态地检测是否存在已实现的委托方法,而不是依赖于静态类型。因此,没有必要正式声明您的视图控制器符合协议UIAlertViewDelegate,除非您希望编译器警告您未实现协议所需的方法。

在内部,在尝试调用它之前UIAlertView检查它是否响应了它即将调用的选择器,基本上消除了声明协议实现的需要。UIAlertViewDelegate对于来自静态类型语言的开发人员来说,这可能看起来很不寻常,但这在 Objective C 中很常见。

于 2013-08-22T13:24:39.623 回答
0

您至少需要设置 的delegate属性。UIAlertView建议让类声明它正在实现UIAlertViewDelegate,但不是强制性的。原因是,ObjectiveC 是动态语言,即使类没有标记协议,运行时也会找到方法实现。

希望有帮助!

于 2013-08-22T13:25:31.283 回答
-1

不,您不需要实现 UIAlertViewDelegate,因为它向 NSObject 确认。

于 2013-08-22T13:25:38.063 回答