Objective c 扩展类或创建类别以自定义现有框架?
我需要从一些第三方框架中定制一些现有类的方法和属性。我知道我可以扩展类或创建类别。但是,如果我想保持框架的源代码不变,并且只创建自己的添加/扩展,那么哪种方法更有效 在我的特殊情况下,我希望检索.m文件中声明的classObjective c 扩展类或创建类别以自定义现有框架?,objective-c,class,oop,objective-c-category,Objective C,Class,Oop,Objective C Category,我需要从一些第三方框架中定制一些现有类的方法和属性。我知道我可以扩展类或创建类别。但是,如果我想保持框架的源代码不变,并且只创建自己的添加/扩展,那么哪种方法更有效 在我的特殊情况下,我希望检索.m文件中声明的classSomeClass:NSObject的私有属性: SomeClass.m @interface SomeClass() @property (nonatomic, strong) NSString *string; //... @end @implementation Som
SomeClass:NSObject
的私有属性:
SomeClass.m
@interface SomeClass()
@property (nonatomic, strong) NSString *string;
//...
@end
@implementation SomeClass
//....
@end
使用一个类别。类别将适用于类的所有子类,而不仅仅适用于您的一个子类。例如,假设您希望能够获取任意UIView的UIImage。如果您将UIView子类化,然后希望在UIScrollView上使用该方法,那么如果不为UIScrollView以及层次结构中要在其上使用该方法的所有其他类创建另一个子类,您将无法使用该方法 不使用子类的另一个原因是,如果框架中有一个方法返回类的实例,例如 +(classWithAPrivateProperty*)getClassWithPrivateProperty
在访问属性之前,必须使用该类中的数据创建子类的新成员 当你说“扩展”时,你是指“子类”吗?类扩展在ObjC中有一个特殊的含义。是的,我的意思是子类:CustomView:UIViewSo对于类别MyCategory+SomeClass,我可以通过在MyCategory+SomeClass中创建一个方法来访问SomeClass的私有变量,以拉取这个变量,并且永远不会修改SomeClass中的任何内容,正如我正确理解的那样。对吗?但是,访问类别中的私有变量会导致链接器错误。您应该使用诸如return[self-valueForKey:@“varFromSomClass”]之类的技巧;分类法。不确定这是否完全合法,但它确实如预期的那样起作用。