Objective-C 日记⑨ 类别Category
2012-09-12 13:35
417 查看
类别(Category)['kætiɡəri] n. 种类,分类;范畴
定义:为现有的类添加新方法
该声明具有如下特点:
1、现有的类位于@interface关键字之后,该方法表示向NSString类中添加一个名称NumberConvenience的类别。(注意:要保证类别名称的唯一性)
2、可以添加其他类别的类(本例中是NSString你也可以添加其他类)和方法。别问了以@end结束。
与类的区别:类别中不可以声明实例变量
说明:lengthAsNumber方法通过[self length]来获得字符串长度。
eg:
创建一个新的NSMutableDictionary类的对象并添加一个字符串及其长度,分别做键和值。
暂无mac 运行结果(不出bug)为5
1、无法向类中添加新的实例变量;
2、命名容易起冲突,简单的说就是类别中的方法名和现有的方法名重名;当冲突时你的类别方法将取代初始方法(类别的优先级高)
作用:
1、将类的实现分散到多个不同的文件或多个不同框架中
2、创建对私有方法的前向引用 前向引用声明不能声明该类的对象, 也不能在内联成员函数中使用该类的对象, 只能声明该类的指针, 引用, 函数形参和返回类型
3、向对象添加非正式协议
注:非正式协议(interface) oc中的协议跟c#中的接口(interface)区别:c#中接口是强制必须实现的,否则编译报错,而obj-c虽然在编译时会警告,但是最终能编译通过。
正式协议(protocal):语义上更强烈一些:要求采用该协议的类,"必须"实现协议中约定的方法
定义:为现有的类添加新方法
一、声明类别
类别的声明与类的声明格式相似,如下:@interfaceNSString (NumberConvenience)//convenience [kən'vi:njəns]n. 便利;厕所;便利的事物-(NSNumber *) lengthAsNumber; @end
该声明具有如下特点:
1、现有的类位于@interface关键字之后,该方法表示向NSString类中添加一个名称NumberConvenience的类别。(注意:要保证类别名称的唯一性)
2、可以添加其他类别的类(本例中是NSString你也可以添加其他类)和方法。别问了以@end结束。
与类的区别:类别中不可以声明实例变量
二、实现类别
@implementation NSString (NumberConvenience) -(NSNumber *) lengthAsNumber { unsigned int length =[self length]; return ([NSNumber numberWithUnsignedInt:length]); } @end
说明:lengthAsNumber方法通过[self length]来获得字符串长度。
eg:
创建一个新的NSMutableDictionary类的对象并添加一个字符串及其长度,分别做键和值。
int main(int argc,const char *argv[]) { NSAutoreleasePool *pool; pool=[[NSAutoreleasepool alloc] init]; NSMutableDictionary *dict; dict =[NSMutableDictionary dictionary]; [dict setObject:[@"hello" lengthAdNumber] forKey:@"hello"]; NSLog(@"%@",dict); [pool release]; return (0); }
暂无mac 运行结果(不出bug)为5
三、局限性及作用
局限性:1、无法向类中添加新的实例变量;
2、命名容易起冲突,简单的说就是类别中的方法名和现有的方法名重名;当冲突时你的类别方法将取代初始方法(类别的优先级高)
作用:
1、将类的实现分散到多个不同的文件或多个不同框架中
2、创建对私有方法的前向引用 前向引用声明不能声明该类的对象, 也不能在内联成员函数中使用该类的对象, 只能声明该类的指针, 引用, 函数形参和返回类型
3、向对象添加非正式协议
注:非正式协议(interface) oc中的协议跟c#中的接口(interface)区别:c#中接口是强制必须实现的,否则编译报错,而obj-c虽然在编译时会警告,但是最终能编译通过。
正式协议(protocal):语义上更强烈一些:要求采用该协议的类,"必须"实现协议中约定的方法
相关文章推荐
- Objective-C-Category类别
- objective-c中Category类别(扩展类)专题总结
- objective-c类别(Category)详细解说
- iOS objective-c之-2:类别Category
- 【Objective-C】OC中类别(Category)基本概念与用法
- Objective-C 类别(Category)浅谈
- objective-c category类别的使用
- 【Objective-C】OC中类别(Category)基本概念与用法
- [置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)
- [Objective-C] 005_Category(类别)
- [7]姥爷幽默谈Objective-C-属性@property,类别Category
- objective-c中Category类别(扩展类)
- 黑马程序员——Objective-C中的Category(类别)——黑马 IOS 技术博客
- Objective-C类别(category)和扩展(Extension)的基本概念
- Objective-C 12 类别Category
- objective-c中Category类别(扩展类)专题总结
- Objective-C 类别(Category)浅谈
- Objective-C----Category 类别、Extension 扩展 专题总结
- Objective-C 类别(category)和扩展(Extension)
- Objective-c Category(类别)