我看到了一个视图控制器的代码,它实现了以下
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
}
但我认为它需要声明使用<UIAlertViewDelegate>
.
但是,我在视图控制器的头文件中找不到这个声明。
我想知道为什么代码可以响应事件?
我看到了一个视图控制器的代码,它实现了以下
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
}
但我认为它需要声明使用<UIAlertViewDelegate>
.
但是,我在视图控制器的头文件中找不到这个声明。
我想知道为什么代码可以响应事件?
Cocoa 经常动态地检测是否存在已实现的委托方法,而不是依赖于静态类型。因此,没有必要正式声明您的视图控制器符合协议UIAlertViewDelegate
,除非您希望编译器警告您未实现协议所需的方法。
在内部,在尝试调用它之前UIAlertView
检查它是否响应了它即将调用的选择器,基本上消除了声明协议实现的需要。UIAlertViewDelegate
对于来自静态类型语言的开发人员来说,这可能看起来很不寻常,但这在 Objective C 中很常见。
您至少需要设置 的delegate
属性。UIAlertView
建议让类声明它正在实现UIAlertViewDelegate
,但不是强制性的。原因是,ObjectiveC 是动态语言,即使类没有标记协议,运行时也会找到方法实现。
希望有帮助!
不,您不需要实现 UIAlertViewDelegate,因为它向 NSObject 确认。