类别
是一种为现有的类添加新方法的方式。
- (NSNumber *)lengthAsNumber;
@end
(1)为NSString类添加一个名称为NumberConveniencede的类别;类别名称具有 唯一性 ,你可以向一个类中添加 任意多 的类别。
(2)可以指定希望向其添加类别的类(NSString),以及类别的名称(NumberConvenience),而且你还可以 列出添加的方法 ,最后以@end结束;类别声明部分 不能有实例变量部分 。
@implementation NSString (NumberConvenience)
- (NSNmuber *)lengthAsNumber{
unsigned int length = [self length];//获得字符串长度
return ([NSNumber numberWithUnsignedInt :length]);
}
//类别的作用:
//(1)将类别实现分散到多个不同文件或多个不同框架中
//(2)创建私有方法的前向引用
//(3)向对象添加非正式协议
//类别的局限性:
//(1)无法添加新的实例变量
//(2)名称冲突,如果类别和现有的方法重名,类别具有更高的优先级,解决办法,类别方法名中添加一个前缀
什么时候使用类别?
(1)类别只能添加新方法,无法添加新的实例变量(2)如果类别名和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
要注意的是Objective-c只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现。
另外要特别注意的是,类别不能像继承时那样给类别接口增加新的实例变量,而是要扩展一个类的行为。
类别的名称是任意的。
- (NSNumber *)lengthAsNumber;
@end
(1)为NSString类添加一个名称为NumberConveniencede的类别;类别名称具有 唯一性 ,你可以向一个类中添加 任意多 的类别。
(2)可以指定希望向其添加类别的类(NSString),以及类别的名称(NumberConvenience),而且你还可以 列出添加的方法 ,最后以@end结束;类别声明部分 不能有实例变量部分 。
@implementation NSString (NumberConvenience)
- (NSNmuber *)lengthAsNumber{
unsigned int length = [self length];//获得字符串长度
return ([NSNumber numberWithUnsignedInt :length]);
}
@end
自己在xcode 4.3.2中可以直接基于新建类别,新建之后没有#import category.h文件编译会显示有警告,但是运行还是可以的。现在质疑的是有没有import的是不是只是一个警告的区别的?