美文网首页
OC中反射机制的概念和使用

OC中反射机制的概念和使用

作者: 云上飘飘扬 | 来源:发表于2018-08-01 16:02 被阅读0次

class反射

1: 通过类名的字符串形式实例化对象

Class class = NSClassFromString(@"Student");

Student *stu = [[class alloc] init];

2:将类名变为字符串

Class class = [Student class];

NSString *className = NSStringFromClass(class);

3:SEL反射

SEL selector = NSSelectorFromString(@"setName:");

[stu performSelector:selector withObject:@"zhang"];

4:将方法变成字符串

SEL selector = NSSelectorFromString(@"setName:");

    NSString *selectorName = NSStringFromSelector(selector);

    NSLog(@"selectorName: %@", selectorName);

    NSString *selectorName2 = NSStringFromSelector(@selector(setName:));

    NSLog(@"selectorName2: %@", selectorName2);

5:去除[stu performSelector:selector withObject:@"zhang"]的警告

<1.>    #pragma clang diagnostic push

            #pragma clang diagnostic ignored "-Warc-performSelector-leaks"

            [stu performSelector:selector withObject:@"zhang"];

            #pragma clang diagnostic pop

<2.>   定义一个宏

             #define SuppressPerformSelectorLeakWarning(Stuff) \

            do { \

            _Pragma("clang diagnostic push") \

            _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \    

            Stuff; \

            _Pragma("clang diagnostic pop") \

            } while(0)

        使用 :SuppressPerformSelectorLeakWarning([stu performSelector:selector withObject:@"zhang"]);

6:什么是SEL?如何声明一个SEL?通过哪些方法能够调用SEL包装起来的方法?

<1> SEL就是对方法的一种包装。包装的SEL类型数据它对应的方法地址,找到方法地址就可以调用方法。在内存中每个类的方法都存储在类对象中,每个方法都有一个与之对应的SEL类型的数据,根据一个SEL数据就可以找到对应的方法地址,进而调用方法。

<2> SEL s1 = @selector(test1); // 将test1方法包装成SEL对象

<3> SEL s2 = NSSelectorFromString(@"test1"); // 将一个字符串方法转换成SEL对象

<4> 调用方法有两种方式

    直接通过方法名来调用[person text];

    间接的通过SEL数据来调用SEL aaa = @selector(text);[person performSelector:aaa];

相关文章

  • OC中的反射机制

    你是否接触过OC中的反射机制?简单聊一下概念和使用1). class反射 2). SEL的反射

  • OC中反射机制的概念和使用

    class反射 1: 通过类名的字符串形式实例化对象 Class class = NSClassFromStrin...

  • 面试题 查漏补缺

    你是否接触过OC中的反射机制?简单聊一下概念和使用 1). class反射 通过类名的字符串形式实例化对象。 Cl...

  • 面试题

    底层:1、runloop和线程有什么关系?2、你是否接触过OC中的反射机制?简单聊一下概念和使用 3、objc中的...

  • 底层

    1、是否接触过OC中的反射机制?简单概念和使用 2、objc中的类方法和实例方法有什么本质区别和联系? 3、run...

  • 【转载】objc反射机制

    反射机制的基本概念: 找了好久oc的反射机制,只能朦胧的得到一句:跟java的反射机制相似 那么笔者就先贴上jav...

  • OC 反射弧机制

    反射弧概念 程序可以访问、检测和修改它本身状态或行为的一种能力。 OC反射弧 OC的反射机制,即在动态运行状态下可...

  • iOS面试题

    1、说一下OC的反射机制; OC 的反射机制以及使用场景 2、block的实质是什么?有几种block?分别是怎样...

  • Effective-OC读书笔记(1)

    针对于这几天在读effective-oc相关书籍,笔者基于OC基础做一些总结 1、反射机制 OC中的反射机制 体现...

  • OC的反射机制

    目录 1 反射机制的概念 2 反射机制原理 首先还是按照惯例和大家解释下什么反射机制? 反射的概念是由Smith在...

网友评论

      本文标题:OC中反射机制的概念和使用

      本文链接:https://www.haomeiwen.com/subject/uhlrvftx.html