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

今天来总结一下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. git错误记录及解决

    一.git每次提交.拉取都要输用户名和密码 问题描述:每次提交.拉取文件时都要输用户名和密码,特别麻烦 原因:在git上面注册了用户名a,然后本机安装了TortoiseGit工具,登录时会在本机C:\ ...

  2. ssh远程访问失败 Centos7

    ssh远程访问失败 Centos7 命令ssh远程访问另外一台主机hadoop.master失败 #ssh hadoop.master 报以下信息 [root@hadoop ~]# ssh hadoo ...

  3. sql的四种匹配模式

    1. % 表示任意0个或多个字符.如下语句:Select * FROM user Where name LIKE '%三%'; 将会把name为“张三”,“三脚猫”,“唐三藏”等等有“三”的全找出来. ...

  4. cnpm下载包与npm版本不一致的问题解决

    参考链接:https://www.jianshu.com/p/949b4e0ae190

  5. 2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析

    2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析 实验要求: 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后 ...

  6. 51nod 2512

    看错题目!!啊啊啊,都说了不能有前导,我怎么这么想当然呢!!另外1也是2的幂次方 代码: #include<iostream> #include<cstdio> #includ ...

  7. 【转】一文掌握 Linux 性能分析之 CPU 篇

    [转]一文掌握 Linux 性能分析之 CPU 篇 平常工作会涉及到一些 Linux 性能分析的问题,因此决定总结一下常用的一些性能分析手段,仅供参考. 说到性能分析,基本上就是 CPU.内存.磁盘 ...

  8. asp.net core 学习资料整理

    net上海俱乐部  白手套大神分享 广州一位大佬总结的系列文章 https://www.cnblogs.com/viter/p/10474091.html     汪宇杰 http://edi.wan ...

  9. MongoDB数据库(二):增删查改

    MongoDB数据库的增删查改 1.插入数据 语法: db.集合名称.insert(document) db.table_name.insert({name:'gj',gender:1}) db.ta ...

  10. 用Python写一个zip文件的密码破解程序

    最近在读<python绝技:运用python成为顶级黑客>一书,文中有如何运用Python中zipfile自带的方法破解zip文件.短短的十几行代码就将一个程序实现了.下面给出书中所用的代 ...