Pet*_*rbo 10 delegates protocols initialization objective-c
每当我创建一个具有符合协议的委托的init时,我都会将init写为:
- (id)initWithDelegate:(id<ProtocolToConform>)delegate;
Run Code Online (Sandbox Code Playgroud)
这样,如果创建对象不符合协议,我将发出警告.
但是我注意到,即UIAlertViewinit方法如下所示:
- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...
Run Code Online (Sandbox Code Playgroud)
委托参数没有指定符合UIAlertViewDelegate协议?任何线索,为什么苹果公司这样做?
我的理解是,几年前 API 还是一团糟,他们仍在修复所有这些问题。
请注意,直到最近,许多协议都是非正式的,并且在 API 中几乎所有地方都只能以id. 苹果在每个版本中都在逐步修复这个问题,例如NSURLConnectioniOS 6.0 中就出现了正式代表。或者请注意,在 iOS 6.1 中,某些id返回类型已更改为instancetype.
好吧,这是我检查头文件后的最初想法:
@property(nonatomic,assign) id /*<UIAlertViewDelegate>*/ delegateRun Code Online (Sandbox Code Playgroud)
显然有人想将协议添加到声明中,但只添加了注释。我猜他们为了兼容性而没有协议。