Raj*_*mar 17 iphone protocols objective-c ios objective-c-category
我对Objective-C协议和类别的一些概念感到困惑.
协议和类别可以由Objective-C中的子类继承吗?
Jer*_*myP 31
类别是在运行时添加到类的方法的集合.因为Objective-C使用动态绑定,这意味着类中定义的方法可用于类及其所有子类.特别是选择器在调用它们时绑定到方法,而不是在编译期间或程序首次加载时.加载类别时,会将类别添加到类中.
协议定义方法签名的集合,符合它们的类承诺实现.一旦类声明它符合协议,就好像方法在该类的接口中声明并且继承规则完全相同:子类继承协议方法的声明和实现,但也可以选择覆盖超类实现.
可以扩展协议本身以生成新协议.由原始协议中方法的超集组成.实际上,正如大多数类从类继承一样NSObject,大多数协议都扩展了NSObject协议(协议名称和类名称在不同的名称空间中).这样声明的对象id<WhateverProtocol>可以像发送基本消息一样发送-retain,-release而不会生成编译器警告.
类别就像是类的扩展.您可以将自己的方法添加到其他类(例如NSString或其他任何类).这意味着任何子类都可以获取方法.
协议是一个方法列表,要求确认它的类实现所有它(除非它使用@optional标记).所以继承它的子类是没有意义的.
编辑:
对于协议实现,我意识到我不够清楚.协议在它的超类中实现的方法可以继承,但是,我的意思通常是你不需要覆盖你的超类的协议方法.
| 归档时间: |
|
| 查看次数: |
9278 次 |
| 最近记录: |