前言
一束析、在實(shí)際工作中總有一些常用參數(shù)注釋
1、創(chuàng)建新類:
Class myCalss = objc_allocateClassPair(<#Class _Nullable __unsafe_unretained superclass#>, <#const char * _Nonnull name#>, <#size_t extraBytes#>) *** *** *** “<#Class _Nullable __unsafe_unretained superclass#>”創(chuàng)建新類的類弃甥;“<#const char * _Nonnull name#>”創(chuàng)建新類的類名稱轉(zhuǎn)換為utf8;“<#size_t extraBytes#>”這個(gè)參數(shù)不用管,填0就好<不用更改為字符串>
eg:NSString *oldClassName = NSStringFromClass([self class]);
? ? NSString *newClassName = [@"new" stringByAppendingString:oldClassName];
? ? // 創(chuàng)建新類
? ? Class myCalss = objc_allocateClassPair([self class], newClassName.UTF8String, 0);
注意:創(chuàng)建新類后需要注冊(cè)類 objc_registerClassPair(myCalss);
2宰僧、添加方法重寫
class_addMethod(<#Class _Nullable __unsafe_unretained cls#>, <#SEL _Nonnull name#>, <#IMP _Nonnull imp#>, <#const char * _Nullable types#>) ?*** *** *** ?“<#Class _Nullable __unsafe_unretained cls#>”要添加方法的類匪傍;“<#SEL _Nonnull name#>”要重寫的方法您市;“<#IMP _Nonnull imp#>”重寫的方法名稱,當(dāng)然是C語(yǔ)言的同時(shí)需要強(qiáng)轉(zhuǎn)為IMP役衡;“<#const char * _Nullable types#>”填寫“v@:@”(意思是void 參數(shù):參數(shù)茵休,在這里填寫其他應(yīng)該可以吧)
eg:// 修改類方法class_addMethod(myCalss, @selector(setName:), (IMP)setName, "V@:@");// 重寫的方法void setName() {}
3、發(fā)送消息:
objc_msgSend(id _Nullable self, SEL _Nonnull op, ...) ?*** *** *** 在這個(gè)函數(shù)里“id _Nullable self”代表一個(gè)OC對(duì)象手蝎,只要傳遞一個(gè)OC對(duì)象即可(Person *p = [[Person alloc] init];這里的p就可以)榕莺;“SEL _Nonnull op”表示需要一個(gè)參數(shù)是方法編號(hào)和一個(gè)對(duì)應(yīng)的imp(@selector(eat));“?...”代表:可擴(kuò)展參數(shù)(NSLog(NSString * _Nonnull format, ...)中“...”是一樣的棵介,有多少參數(shù)直接往里填使用“钉鸯,”隔開即可)
eg:objc_msgSend([[Person alloc] init], @selector(eat));
4、