CaptainHook
假如class-dump后找到了頭文件蓝厌,并且知道了屬性和方法
例如拿到的方法如下所示(此方法不在文件中,存在與ipa包中):
CustomViewController :UIViewController
@property (nonatomic, copy) NSString* newProperty;
+ (void)classMethod;
- (NSString*)getMyName;
- (void)newMethod:(NSString*) output;
- CHDeclareClass 申明類可以調(diào)用屬性和方法
CHDeclareClass(CustomViewController)
- 進(jìn)行對(duì)方法和屬性的調(diào)用(請(qǐng)仔細(xì)閱讀class-dump中的屬性和方法古徒,以下是如何調(diào)用)
//方法已經(jīng)明確寫出了傳什么
# optimization 當(dāng)前self或者其他
#return_type 需要傳入什么類型
#class_type 傳入哪一個(gè)類
#name 屬性名稱
CHOptimizedMethod0(<#optimization#>, <#return_type#>, <#class_type#>, <#name#>)
CHOptimizedMethod0(self, NSString*, CustomViewController, getMyName){
//需要實(shí)現(xiàn)的代碼
}
CHDeclareMethod1(void, CustomViewController, newMethod, NSString*, output){
//需要實(shí)現(xiàn)的代碼
}
CHOptimizedClassMethod0(self, void, CustomViewController, classMethod){
//需要實(shí)現(xiàn)的代碼
}
CHOptimizedMethod(0, self, NSString*, CustomViewController, newProperty)
{
//需要實(shí)現(xiàn)的代碼
}
//需要實(shí)現(xiàn)的代碼就是拓提,你對(duì)以上傳入屬性值進(jìn)行修改的,需要返回就returen隧膘,不需要?jiǎng)t調(diào)用父類代态,或者直接不做任何操作
//添加新的屬性
CHPropertyRetainNonatomic(CustomViewController, NSString*,
newProperty, setNewProperty);
- 構(gòu)造函數(shù)(CHConstructor)
CHConstructor{
//裝載類
CHLoadLateClass(CustomViewController);
//類名稱 類方法
CHClassHook0(CustomViewController, getMyName);
CHClassHook0(CustomViewController, classMethod);
//類名稱 屬性
CHHook0(CustomViewController, newProperty);
CHHook1(CustomViewController, setNewProperty);
}