iOS笔记 复习Category和Extension
来源:互联网 发布:预防数据库死锁的方法 编辑:程序博客网 时间:2024/04/27 16:41
一、概述
类别是一种为现有的类添加新方法的方式。
利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的class添加方法,包括那些没有源代码的类(如某些框架类)。
二、示例
1、声明类别
@interface NSString (CategoryDemo)
-(NSNumber*) lengthAsNumber;
@end
2、实现类别
@implementation NSString (CategoryDemo)
-(NSNumber*) lengthAsNumber{
NSUInteger length = [self length];
return ([NSNumbernumberWithUnsignedInt: length]);
}
@end
3、调用:
NSMutableDictionary *dic =[NSMutableDictionarydictionary];
[dicsetObject: [@"Hello"lengthAsNumber]forKey:@"hello"];
[dic setObject: [@"World!" lengthAsNumber] forKey: @"world"];
NSLog(@"%@", dic);
4、打印结果:
2012-07-27 17:43:32.993CategoryDemo[2193:f803] {
hello = 5;
world = 6;
}
三、类别的局限性
有两方面局限性:
(1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。
(2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。
四、类别的作用
类别主要有3个作用:
(1)可以将类的实现分散到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。
(2)创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
(3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。
四、扩展extension
下面是extension和category的语法示例:
// extension
@interface MyObject(){
int iextension;
}
-(void)testInExtension;// 类的mainimplementation不实现的话,有编译警告。
@end
// category
@interface MyObject(categoryDemo){
// int icategory; // error: Ivarsmay not be placed in categories
}
-(void)testInCategory;// 不强制要求在类的mainimplementation中实现
@end
// implementation
@implementation MyObject
//
//-(void)testInExtension{
//
//}
//
//-(void)testInCategory{
//
//}
@end
他们的主要区别是:
1、形式上来看,extension是匿名的category。
2、extension里声明的方法需要在mainimplementation中实现,category不强制要求。
3、extension可以添加属性(变量),category不可以。
- iOS笔记 复习Category和Extension
- 【iOS学习笔记】Category和Extension
- ios Category和Extension
- iOS中category和extension
- iOS学习笔记06—Category和Extension
- iOS学习笔记06—Category和Extension
- 44.iOS学习笔记—Category和Extension
- iOS学习笔记06—Category和Extension
- IOS学习笔记-Category与Extension
- iOS类别和扩展(Category和Extension)
- iOS复习 OC语言 类目Category/类扩展Extension
- iOS中 category 和extension的区别
- IOS中的类别(Category)和扩展(Extension)
- iOS Category 和 Extension的区别
- iOS类别(Category)和扩展(Extension)
- iOS中 category 和extension的区别
- ios Category 和 extension 区别,Category中使用属性
- IOS category 与 extension
- delphi 更改DBGrid 颜色技巧
- 为常用的工具和语言自定义Sublime Text的编译系统
- iOS统计代码总行数
- LOD你好,LOD再见
- BLE-NRF51822教程2-工程初始化流程
- iOS笔记 复习Category和Extension
- Deep Belief Networks资料汇总
- mysql中聚合函数条件
- 关于XAMPP下使用PHPBB或者Discuz!
- JQUERY基础知识总结
- ViewPager或ImgeView加载图片出现内存溢出(OOM)
- 安卓开发1--搭建最新开发环境及新建项目检测
- java读取properties文件的几种方法
- sqlserver数据库收缩日志并限制最大增长