mor*_*des 4 protocols objective-c
如果我不得不在对象上调用"respondsToSelector:",那么定义一个方法作为可选实际上对我有什么用呢?
例如,假设我有一些像这样的代码
id<MyProtocol> myObj = [[MyClass alloc] init];
if([myObj respondsToSelector:@selector(aMethod)]){
[myObject aMethod];
}
Run Code Online (Sandbox Code Playgroud)
只要"MyClass"实现"aMethod",这个代码是否会运行完全相同或者不是MyProtocol定义的"aMethod"?
我可以看到纯粹从代码可读性的角度定义这个可选协议的用法,但是从技术的角度来看它是否真的有任何影响(除了不必在头文件中声明方法).
几乎就是它在锡上所说的:它与可选功能有关.如果您的应用程序aMethod包含必要的功能,那么它应该是@required.否则,如果它为实现者提供了执行其他操作的附加功能,但是它的缺失不会对它应该工作的方式产生负面影响(即,实现者不响应@selector(aMethod)选择器就好了),你可以做到@optional.
您在视图委托协议中看到了很多.以iOS UITableViewDelegate为例:这是一组委托协议的方法,用于定义表视图的页眉和页脚的视图:
tableView:viewForHeaderInSection:tableView:viewForFooterInSection:tableView:heightForHeaderInSection:tableView:heightForFooterInSection:如果代理没有实现这些,UIKit只会绘制给定的默认部分页眉和页脚tableView,它们预先打包了默认UITableView元素.但是,如果它们被实现,UIKit将使用这些方法提供的自定义节头和页脚视图tableView.
该@optional关键字几乎讲述了人在写一个类来实现委托,这些方法是可选的.我相信UIKit的不conformsToProtocol:和respondsToSelector:检查内部反正.
| 归档时间: |
|
| 查看次数: |
4583 次 |
| 最近记录: |