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

 

转载于:https://www.cnblogs.com/howlaa/p/10133095.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值