Objective-C反射機制:是類似於Java的反射機制,這種動態機制可以讓oc語言更加的靈活。這句話是對oc反射機制的初步認識,不過具體的怎么類似於java機制,怎么讓oc更加的靈活,還得看下面的內容才能了解。
oc反射機制有三個用途:
1.獲得Class
2.檢查繼承關系
3.動態的調用方法
1. 獲得class
#import "Person.h"
// 1.通過字符串來獲得Class
Class className = NSClassFromString(@"Person");
NSLog(@"%@", className);
// 2.直接使用Class來創建 一般情況之下我們都用這種方式創建對象
Person *person = [[Person alloc] init];
NSLog(@"%@", person);
// 通過實例對象獲得Class
NSLog(@"%@", [person class]);
// 3.通過類來獲得Class
NSLog(@"Person.Class = %@", [Person class])
2.檢查繼承關系
// NSObject提供的了一下幾個方法可供一般(繼承於NSObject)的對象直接調用
// 通過對象來判斷該對象的Class
Person *person = [[Person alloc] init];
NSLog(@"[person class] = %@", [person class]);
// 判斷對象是否為某個類的實例對象
NSLog(@"person是否是Person的實例對象:%d", [person isMemberOfClass:Person.class]);
// 判斷實例對象是都為某個類及其子類的實例
NSLog(@"[person isKindOfClass:[person class]] = %d ", [person isKindOfClass:[person class]]);
// 判斷的實例對象是否實現了指定的協議
NSLog(@"%d", [person conformsToProtocol:@protocol(UITableViewDelegate)]);
3.動態的調用方法
// 此處希望能動態的調用move方法
// 使用 performSelector: withObject: 動態的調用move:方法
[self performSelector:@selector(move:) withObject:@2];
[self performSelector:NSSelectorFromString(@"move:") withObject:@10];
// 使用objc_msgSend 進行實現方法
objc_msgSend(self, @selector(move:), @4);
objc_msgSend(self, @selector(test:andNum:), @1, @2);