美文网首页
OC的反射机制

OC的反射机制

作者: Maj_sunshine | 来源:发表于2018-08-07 10:40 被阅读19次

概念

反射机制是指程序可以访问、检测和修改它本身状态或行为的一种能力。在OC中是可以去动态访问,检查,修改的方法就是反射机制的一种体现,其实我们一种都在使用反射机制来做项目,可能自己还不知道

反射方法

访问获取

// SEL获取字符串
FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
// 字符串获取SEL
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
// Class获取字符串
FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
// 字符串获取Class
FOUNDATION_EXPORT Class __nullable NSClassFromString(NSString *aClassName);
// Protocol获取字符串
FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0);
// 字符串获取Protocol
FOUNDATION_EXPORT Protocol * __nullable NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0);

检查(下面四个方法可以说开发常用)

// 当前对象是否这个类或其子类的实例
- (BOOL)isKindOfClass:(Class)aClass;
// 当前对象是否是这个类的实例
- (BOOL)isMemberOfClass:(Class)aClass;
// 当前对象是否遵守这个协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
// 当前对象是否实现这个方法
- (BOOL)respondsToSelector:(SEL)aSelector;

检查是否存在某个类

if ([view isKindOfClass:[SWAlertView class]] || [NSStringFromClass([view class]) isEqualToString:@"SWCouseFinishAlertView"]) {
            _isHaveAlert = YES;
}

具体应用

一般是根据服务器的数据动态的打开某个页面,用在轮播图或者服务器推送的通知上。和服务器约定数据格式

@{
     // 类名
     @"class" : @"SWTrainViewController", 
     // 数据参数
     @"data" : @{ @"id": @"11323"}
}

我们可以去动态的获取类,传值和跳转

- (void)remoteNotificationPushViewController:(NSDictionary *)dic {
    // 字符串初始化控制器
    UIViewController *viewController = [[NSClassFromString(dic[@"class"]) alloc] init];
    // 获取参数列表,使用枚举的方式,对控制器属性进行KVC赋值
    NSDictionary *body = dic[@"data"];
    [body enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
         // 赋值
        [viewController setValue:obj forKey:key];
    }];
    [self.navigationController pushViewController:viewController animated:YES];
}

这里传值是直接的属性传值,在项目中其中一个控制器我传了model过去,会导致这样的属性传值失败,所以尽量在需要跳转的地方不要写model传值,可能开发过程中传model方便很多。

相关文章

  • Effective-OC读书笔记(1)

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

  • iOS面试题

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

  • 问题大全

    1.说一下OC的反射机制 所有的oc 对象都是继承于nsobject nsobject 提供了如下反射方法反射方...

  • 【转载】objc反射机制

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

  • OC反射机制

    概述 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力...

  • OC反射机制

    系统Foundation框架为我们提供了一些方法反射的API,我们可以通过这些API执行将字符串转为SEL等操作。...

  • OC反射机制

    反射机制定义: 运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意...

  • OC的反射机制

    概念 反射机制是指程序可以访问、检测和修改它本身状态或行为的一种能力。在OC中是可以去动态访问,检查,修改的方法就...

  • OC的反射机制

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

  • OC的反射机制

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

网友评论

      本文标题:OC的反射机制

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