美文网首页iOS开发
iOS Categories和Extensions

iOS Categories和Extensions

作者: VeraZhang | 来源:发表于2016-03-28 14:17 被阅读759次

Category是什么?

Category用于向已经存在的类添加方法来达到扩展已有类的目的。在对系统类进行扩展的时候,可以直接给系统类添加方法。新添加的方法同样也会被扩展的类的所有子类自动继承。

#import "ClassName.h"

@interface ClassName ( CategoryName )

// method declarations

- (void)method1;

@end

Category的注意点:

1)不能在分类中重写系统方法,因为会把系统的功能给覆盖掉,而且分类中不能调用super。但是,这种情况可以用来修复,没有源码的类中方法有Bug的情况。

2)category不能给类添加实例变量。使用runtime的方式,可以给iOS添加属性字段。objc_getAssociatedObject() objc_setAssociatedObject()

3)category添加的方法不强制要求在implement文件中实现,可以利用消息转发指定其他对象去实现。

Category的用途

1)无需创建继承类,实现对已有类扩展。并且可以被扩展的类的所有子类自动继承。

2)可以用来修复没有源码类的bug。

3)对于一个类多个开发人员维护的情况,可以根据不同用途创建不同分类。

Extensions

extension可以称为匿名的category。extension声明的方法在implement文件中一定要实现。extension可以添加实例变量和属性变量。extension常用的一个功能是,原类中readonly的属性变量,可以在extension中重新声明为readwrite。并且属性变量的读写方法都要在implement文件中实现。

如下:

//原类

@interface MyClass : NSObject

@property (retain, readonly) float value;

@end

// Private extension, typically hidden in the main implementation file.

@interface MyClass ()

@property (retain, readwrite) float value;

@end

相关文章

网友评论

    本文标题:iOS Categories和Extensions

    本文链接:https://www.haomeiwen.com/subject/ikhdlttx.html