好久没有总结过了,一直在赶项目。。。

今天来总结一下OC中的反射机制,有什么不对的地方,还请多多海涵。

反射机制,简单的说就是在程序运行期间通过类的名字来动态的获取类的信息,从而实现动态的创建类,以及动态的调用类的方法等。

当我们在编码的时候不知道要创建哪个类的对象,需要在运行期间根据配置文件来获取我们要创建的对象的类的名字。这时候我们就可以通过反射机制,在程序运行期间通过类的名字获取类的信息。

OC中常用的反射机制的几种方法,基本上都在Founditon框架和NSObjct类的方法列表里面。

1.NSObjct类中的方法

1. isKindOfClass

该方法用于判断一个对象是不是一个类或者这个类的字类的实例对象。

2. isMemberOfClass

该方法用于判断一个对象是不是一个类的实例对象

3.conformsToProtocol

该方法用于判读一个对象是否遵循了一个协议

4.respondsToSelector

该方法用于判断一个对象是否实现了这个方法

2.Foundation (NSObjCRuntime.h)

1. NSStringFromSelector

该方法可以动通过一个 SEL 获取方法的名字

2. NSSelectorFromString

该方法可以通过方法的名字获取对应的 SEL

除了这种方法还可以通过下面的方面来获取

1、@Selector()

3. NSStringFromClass

该方法可以获取类的名字

4. NSClassFromString

该方法可以根据一个类的名字获取到这个类

除了这种方法,我们还可以通过下面的方法获取类的名字

1、[self class];

2、[Class class];

动态调用方法

1、[self performSelector:(id) withObject:(id)];

2、objc_msgSend(self,SEL,parameters)

oc中的反射机制的更多相关文章

  1. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  2. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  3. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  4. .Net 中的反射机制

    .Net 中的反射机制 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标 ...

  5. Python Python中的反射机制

    Python中的反射机制 by:授客 QQ:1033553122 概念 借用java中的定义:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方 ...

  6. Javascript中的反射机制(五)

    一: 什么是反射机制 反射机制指的是程序在运行时能够获取自身的信息.例如一个对象能够在运行时知道自己有哪些方法和属性. 二: 在JavaScript中利用for(…in…)语句实现反射 在JavaSc ...

  7. C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)

    from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...

  8. 【Java基础】java中的反射机制与动态代理

    一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...

  9. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

随机推荐

  1. docker搭建及使用:centos7.0+docker+flask+nginx

    flask笔记: centos7安装Docker: yum install docker 启动docker服务: service docker start 构建基本镜像: sudo docker pu ...

  2. 第一天学JAVA,下载JDK,配置JAVA环境变量!!!

    步骤一:下载JDK https://www.oracle.com 我们首先进入到这个网站下载我们运行JAVA的所必须的JDK 进入到这个网站按照图示进入到下一个页面 因为刚学JAVA,我们的JDK版本 ...

  3. python基本面试题

    https://www.cnblogs.com/changwentao/p/9432166.html

  4. angularjs杂谈

    1.MVVM的看法:我给view里面各种控件也定义一个对应的数据对象,这样,只要修改这个数据对象,view里面显示的内容就自动跟着刷新,而在view里做了任何操作,这个数据对象也跟着自动更新. Vie ...

  5. Python爬虫之selenium各种注意报错

    刚刚写完第一个selenuim+BeautifulSoup实战爬虫 爬淘宝.发现代码写完后不加for 翻页的时候没什么问题 解析 操作 都没问题 也就是说第一页 的内容 完好 pagebtn=wait ...

  6. python中的MySQL使用 + pickle使用

    (1)python中有一个包“sqlite3”,可以用来进行数据库相关的操作: 参考下面一个例子: import sqlite3 import pickle img_list = [('a' , 0) ...

  7. Resharper使用详解(转)

    万恶的360文档 解除复制的限制 Ctrl + Shift + i 打开控制台,也可以鼠标右键,选最后一个检查也可以打开控制台,输入: setInterval = null; //将内置无限循环函数设 ...

  8. ajax 调用 .net core WebAPI,报错 400 (Bad Request) Unexpected character encountered while parsing value

    此文由博主前两天的提问及 dudu 的回答整理,地址:https://q.cnblogs.com/list/myquestion 情况说明 基于 .net core 写了一个 Web API,用 po ...

  9. Python——字符串

    p ython——字符串 ①加法 连接两个字符串 ②乘法  复制字符串 python——转义字符 \n 换行 \' 单引号 \'' 双引号 \\ 反斜杠 raw字符串:无视转义字符   转义: 字符串 ...

  10. 洛谷p1106 删数问题 题解

    传送门 # 4.24一个重要的日子.我人生中第一道7个测试点下载了5个的题目被我发现了,第一次用光下载数据点机会,真心坑点重重. 这题是一道很经典的贪心题目,可能是因为我太蒻了,导致我一直以为最少普及 ...