明天要去面试一个公司,今天复习下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的反射机制的更多相关文章

  1. 金三银四,2018最新iOS面试题,由它可以搞定面试官?

    序言 这些资料,你一定会用到!我相信很多人都在说,iOS行业不好了,iOS现在行情越来越难了,失业的人比找工作的人还要多.失业即相当于转行,跳槽即相当于降低自己的身价.那么做iOS开发的你,你是否在时 ...

  2. Java基础复习笔记系列 十三 反射机制

    主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...

  3. JavaSE基础复习---Class类与反射机制

    ---恢复内容开始--- 目录: 1.java.lang.class类 2.Java中的反射机制 3.运行时与编译时概念 1. java.lang.class类 Java程序在运行时,Java运行时系 ...

  4. [转载]iOS面试题总

    转载自:http://blog.sina.com.cn/s/blog_67eb608b0101r6xb.html (2014-06-13 20:23:33) 转载▼ 标签: 转载   crash 原文 ...

  5. 最全的iOS面试题及答案-转载

    1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现 ...

  6. IOS面试题总结

    iOS面试题: 一:网络理论知识的理解 1:Internet物理地址和IP地址转换采用什么协议 ARP(Address Resolution Protocol)地址解析协议 2:Internet采用哪 ...

  7. iOS面试题及答案2015.6.7

    iOS面试题及答案     1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承 ...

  8. iOS 面试题 总结

    #include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc&q ...

  9. 试答卓同学的 iOS 面试题

    卓同学昨天写了一篇文章<4道过滤菜鸟的iOS面试题>.我手痒决定默写一个参考答案.后来发现不认真回答被大家喷成狗,所以决定积极改造,重新做人.下面就是修编之后的答案. 1. struct和 ...

随机推荐

  1. C#返回JSON格式数据

    又类的属性生成json格式数据 using System; using System.Collections.Generic; using System.Linq; using System.Web; ...

  2. Jenkins + Gerrit + Git

    参考:https://blog.csdn.net/mr_raptor/article/details/76223233 https://www.cnblogs.com/kevingrace/p/565 ...

  3. Linux命令行基础

    常用命令 命令 功能 pwd 打开当前所在的文件目录 ls 查看当前文件夹下的文件(不包括隐藏文件) ls -a 查看当前文件夹下的文件(包括隐藏文件) ls -al 查看当前文件夹下的文件(包括隐藏 ...

  4. iframe子页面与父页面元素的访问以及js变量的访问

    1.子页面访问父页面元素  parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素  document.getEle ...

  5. Centos7 Lnmp的环境搭建

    centos  版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 关闭防火墙 sy ...

  6. 如何执行shell命令

    可使用 git 命令行来执行shell命令,如 D 盘下的一 shell 脚本 test.sh 如下: echo "Hello world" 打开命令行,输入命令执行: 转载请注明 ...

  7. 【Linux】Jenkins安装(二)

    Jenkins介绍 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 安装环境 操作系统:lin ...

  8. [批处理]使用IncrediBuilder加速自动化测试过程

    背景 1.目前单机全部跑完一次测试的时间大概是5个小时 2.7个虚拟机进行分布式执行的时间大概为3.5小时(包含复制.收集日志的时间) 预期 期望通过IncrediBuilder的虚拟进程的功能在单机 ...

  9. python 常用turtle

    python 常用turtle 常用命令1 import turtle turtle.bgcolor("black") 设置背景颜色 turtle.onscreenclick(x, ...

  10. 用JDBC连接 数据库 进行简单的增删改查

    JDBC为java的基础.用jdbc实现对数据库的增删改查的功能是程序员的基本要求.本例以mysql为例,首先要使用本例需要添加mysql-connector-java-5.1.7-bin.jar包. ...