Objective c 使用委托协议初始化
每当我创建一个具有符合协议的委托的init时,我将init写为:Objective c 使用委托协议初始化,objective-c,delegates,initialization,protocols,Objective C,Delegates,Initialization,Protocols,每当我创建一个具有符合协议的委托的init时,我将init写为: - (id)initWithDelegate:(id<ProtocolToConform>)delegate; delegate参数未指定是否符合UIAlertViewDelegate协议?苹果为什么会这样做,有什么线索吗?好问题!我做同样的事情是希望在编译时捕获更多的错误 苹果似乎符合他们自己的标准;如下列文件所述: 要为自定义类实现委托,请完成以下步骤: 在类头文件中声明委托访问器方法 实现访问器方法。在内存管理
- (id)initWithDelegate:(id<ProtocolToConform>)delegate;
delegate参数未指定是否符合
UIAlertViewDelegate
协议?苹果为什么会这样做,有什么线索吗?好问题!我做同样的事情是希望在编译时捕获更多的错误
苹果似乎符合他们自己的标准;如下列文件所述:
要为自定义类实现委托,请完成以下步骤:
在类头文件中声明委托访问器方法
实现访问器方法。在内存管理的程序中,为了避免保留周期,setter方法不应保留或复制您的委托
我的理解是,API在几年前是一个大烂摊子,他们仍然在解决所有这些问题 请注意,直到最近,许多协议都是非正式的,在API中几乎到处都可以找到代理,而代理只能作为
id
。苹果在每一个版本中都在逐步修复它,例如iOS 6.0附带的正式NSURLConnection
Delegories。或者请注意,在iOS 6.1中,一些id
返回类型被更改为instancetype
在检查了头文件之后,这是我最初的想法:
@property(nonatomic,assign) id /*<UIAlertViewDelegate>*/ delegate
@属性(非原子,赋值)id/**/delegate
显然有人想在声明中添加协议,但只添加了注释。我猜他们没有使用协议来实现兼容性。我认为他们只是懒得添加,或者可能是因为所有UIAlertViewDelegate方法都是可选的,委托是否符合协议并不重要。在这种情况下,这不会带来任何好处,要使协议与类一致,这将是一个额外的麻烦。尽管如果您选中UITableView.h,您可以看到
@property(nonatomic,assign)id delegate代码>所以他们似乎把它弄混了:-)
- (id)delegate;
- (void)setDelegate:(id)newDelegate;
- (id)delegate {
return delegate;
}
- (void)setDelegate:(id)newDelegate {
delegate = newDelegate;
}
@property(nonatomic,assign) id /*<UIAlertViewDelegate>*/ delegate