Objective-C反射机制
? ? ? 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);
?
轉載于:https://www.cnblogs.com/lltcom/p/5893738.html
總結
以上是生活随笔為你收集整理的Objective-C反射机制的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 正在启动oracle universal
- 下一篇: 做一个常规的banner图——负边距的使
