常用的OC中的反射
OC中的反射是基于runtime實(shí)現(xiàn)的
1.字符串和class的轉(zhuǎn)換
Class class = NSClassFromString(@"Person"); //類名的字符串Person *p1 = [[class alloc] init];2.將類名轉(zhuǎn)換為字符串
Class class = [Person class];NSString *classString = NSStringFromClass(class);3.字符串和內(nèi)部方法轉(zhuǎn)換(SEL)
SEL sel = NSSelectorFromString(@"eat");if ([p1 respondsToSelector:sel]) {[p1 performSelector:sel];}4.將方法變?yōu)樽址?/p> NSString *methodString = NSStringFromSelector(@selector(eat));
5.將協(xié)議變成字符串
Protocol *ptlName = NSProtocolFromString(@"NSCopying");6.將字符串變成協(xié)議
NSString *stringFromProtocol = NSStringFromProtocol(@protocol(NSCopying))7.字符串和屬性的轉(zhuǎn)換
OC中屬性的反射通過(guò)KVC(Key-Value Coding)機(jī)制實(shí)現(xiàn),KVC是一種間接訪問(wèn)對(duì)象屬性的機(jī)制,不直接調(diào)用getter 和 setter方法,而使用valueForKey 來(lái)替代getter 方法,setValue:forKey來(lái)代替setter方法。
8.判斷繼承關(guān)系
NSString *str = [[NSString alloc]init];// 判斷當(dāng)前的類是否為此類的對(duì)象[str isMemberOfClass:[NSString class]];// 判斷是否為某一個(gè)類或者子類的對(duì)象[str isKindOfClass:[NSString class]];// 判斷對(duì)視是否實(shí)現(xiàn)了指定的協(xié)議[str conformsToProtocol:@protocol(NSCopying)];// 是否實(shí)現(xiàn)對(duì)應(yīng)的方法[str respondsToSelector:@selector(printAction)];總結(jié)
- 上一篇: bzoj3811 玛里苟斯
- 下一篇: [句子成分] 三、宾语