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);
2018年底,IOS面试题的复习之OC的反射机制的更多相关文章
- 金三银四,2018最新iOS面试题,由它可以搞定面试官?
序言 这些资料,你一定会用到!我相信很多人都在说,iOS行业不好了,iOS现在行情越来越难了,失业的人比找工作的人还要多.失业即相当于转行,跳槽即相当于降低自己的身价.那么做iOS开发的你,你是否在时 ...
- Java基础复习笔记系列 十三 反射机制
主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...
- JavaSE基础复习---Class类与反射机制
---恢复内容开始--- 目录: 1.java.lang.class类 2.Java中的反射机制 3.运行时与编译时概念 1. java.lang.class类 Java程序在运行时,Java运行时系 ...
- [转载]iOS面试题总
转载自:http://blog.sina.com.cn/s/blog_67eb608b0101r6xb.html (2014-06-13 20:23:33) 转载▼ 标签: 转载 crash 原文 ...
- 最全的iOS面试题及答案-转载
1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现 ...
- IOS面试题总结
iOS面试题: 一:网络理论知识的理解 1:Internet物理地址和IP地址转换采用什么协议 ARP(Address Resolution Protocol)地址解析协议 2:Internet采用哪 ...
- iOS面试题及答案2015.6.7
iOS面试题及答案 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承 ...
- iOS 面试题 总结
#include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc&q ...
- 试答卓同学的 iOS 面试题
卓同学昨天写了一篇文章<4道过滤菜鸟的iOS面试题>.我手痒决定默写一个参考答案.后来发现不认真回答被大家喷成狗,所以决定积极改造,重新做人.下面就是修编之后的答案. 1. struct和 ...
随机推荐
- 爬虫 - 动态分页抓取 游民星空 的资讯 - bs4
# coding=utf-8 # !/usr/bin/env python ''' author: dangxusheng desc : 动态分页抓取 游民星空 的资讯 date : 2018-08- ...
- [Freemarker]自定义时间戳函数
使用freemarker的web项目经常需要用在Url后面加上时间戳来保证资源不被缓存,我们可以自定义方法实现时间戳. 先看freemarker配置信息: <bean id="free ...
- 2019年春季学期第四周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计一 这个作业要求在哪里 2019春季学期第四周作业 我的课程目标 重新学习有关数组的问题 这个作业在哪个具体方面帮助我实现目标 对于置换有了新的见解 参考文献 中国 ...
- vghyj
2017*****1012:我是康迪:我的爱好是计算机:我的码云个人主页是:https://gitee.com/kdkdkdkd我的第一个项目地址是:https://gitee.com/kdkdkdk ...
- mysql语句,插入id随机生成
insert into 表名 VALUES(uuid(),…) 还有一个uuid_short(),只有数字 insert into 表名 VALUES(uuid_short(),…)
- 构建stm32最小系统板注意事项
由于学习工作的需要自己定制stm32系统板,以下将关键的注意事项进行解释,欢迎交流.(以stm32f103为例) 1.VBAT引脚 在主流的设计中,VBAT与0欧的电阻串联,接至3.3V. 2.OSC ...
- Python3.0科学计算学习之函数
函数 函数允许程序的控制在不同的代码片段之间切换,函数的重要意义在于可以在程序中清晰地分离不同的任务,将复杂的问题分解为几个相对简单的子问题,并逐个解决.即"分而治之". Pyth ...
- PHP 类的命名空间 和自动载入
PHP 类的自动载入有两种方法,__autoload() 和 spl_autoload_register() ,就是在PHP代码中new一个类的时候,会自动触发,将类的类名包括命名空间作为参数传进入方 ...
- (转)MERGE语法详解
merge语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入. 其基本语法规则是 merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a ...
- DotNetty网络通信框架学习之初识Netty
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...