扩展类或创建类别以自定义现有框架?

时间:2013-10-11 19:22:46

标签: objective-c class oop objective-c-category

我需要从某些第三方框架中自定义现有类的一些方法和属性。我知道我可以扩展课程或创建一个类别。但是,如果我想保持框架的源代码未触及并且只创建我自己的添加/扩展,哪种方法更好?

在我的特定情况下,我想检索在.m文件中声明的类SomeClass:NSObject的私有属性:

SomeClass.m

@interface SomeClass() 
@property (nonatomic, strong) NSString *string;
//...
@end

@implementation SomeClass 
//....
@end 

1 个答案:

答案 0 :(得分:0)

使用类别。类别适用于该类的所有子类,而不仅仅适用于您的一个子类。例如,假设您希望能够获得任意UIView的UIImage。如果您继承UIView,然后想要在UIScrollView上使用该方法,则无法在不为UIScrollView创建另一个子类的情况下使用该方法,并且您希望在层次结构中使用该方法的所有其他类。

不使用子类的另一个原因是,如果你的框架中有一个方法,它返回一个类的实例,如

+(classWithAPrivateProperty *)getClassWithPrivateProperty

在访问该属性之前,您必须使用该类中的数据创建子类的新成员。