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);

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com