2018年底,IOS面試題的復習之OC的反射機制


明天要去面試一個公司,今天復習下IOS題目吧

1.說一下OC的反射機制

答:OC的反射機制類似於JAVA的反射機制,這種動態反射機制可以讓OC語言更加靈活。這句話是對反射機制的初步認識,具體表現在哪里使得他類似JAVA的反射機制,又如何讓OC語言更加的靈活呢?可以通過一些代碼去更好的理解。總的來說,OC的反射機制主要有三個用途:

1.獲得CLASS

2.檢查繼承關系

3.動態調用方法

先來說說第一個用途,獲得class的具體用法:

#import "Person.h"

//1.通過字符串來獲取class

Class classname = NSClassFromString("Persong");

NSLog(@"%@", className);

//2.直接使用Class來創建,一般情況下我們都使用這種方法

Person *person  = [[Person alloc] init];

NSLog(@"%@", person);

//然后通過實例對象去獲取Class .[person class]方法

NSLog(@"%@", [person class]);

//3.通過類來獲得Class

NSLog(@"Person.Class = %@", [Person class])

 

再來說說第二個用途,也就是檢查繼承關系

//NSObject提供了一些方法可供一般對象直接調用(繼承與NSObject)。

//1.通過對象,來判斷該對象的Class也就是[對象 class]方法;

Person *person = [[Person alloc] init];

SLog(@"[person class] =  %@", [person class]);

//2.去判斷某個對象是否為某個類的實例對象isMemberOfClass:Person

NSLog(@"person是否是Person的實例對象:%d", [person isMemberOfClass:Person.class]);

//3.判斷某個實例對象是否為某個類及其子類的實例isKindOfClass

 NSLog(@"[person isKindOfClass:[person class]] = %d ", [person isKindOfClass:[person class]]);

//3.判斷某個實例是否實現了指定的協議

NSLog(@"%d", [person conformsToProtocol:@protocol(UITableViewDelegate)]);

 

最后說說第三個用途,動態調用方法

//此處希望調用remove方法

  // (1)使用 performSelector: withObject: 動態的調用move:方法(消息傳遞)

 [self performSelector:@selector(move:) withObject:@2];

[self performSelector:NSSelectorFromString(@"move:") withObject:@10];

 // (2)使用objc_msgSend 進行實現方法(為某個類對象發送消息,並返回一個值。參數1,2分別是接收消息的實例對象,要執行的方法)

 objc_msgSend(self, @selector(move:), @4);

objc_msgSend(self, @selector(test:andNum:), @1, @2);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM