美文网首页
iOS 反射

iOS 反射

作者: 活最好的自己 | 来源:发表于2019-04-09 12:30 被阅读0次

1. class反射

使用反射往往不需要导入头文件, 就可以剔除一些对象. 类似于分类, 不导入也会调用其中的 load 方法.

  1. 通过类名的字符串形式实例化对象。
Class class = NSClassFromString(@"student"); 
Student *stu = [[class alloc] init];
  1. 将类名变为字符串。
Class class =[Student class];
NSString *className = NSStringFromClass(class);

2. SEL的反射

使用@selector 在编译时查找所需的方法

  1. 通过方法的字符串形式实例化方法。
SEL selector = NSSelectorFromString(@"setName");  
[stu performSelector:selector withObject:@"Mike"];
[[Person class] performSelectorOnMainThread:@selector(eat) withObject:nil waitUntilDone:YES];
  1. 将方法变成字符串。
NSStringFromSelector(@selector(setName:));

3. class 反射使用场景一: 使用简单的代号枚举类名

  1. 适用于使用简单的枚举类型或字符串, 匹配类名, 方便独立快捷地创建各自的类.
  2. 优点是, 不需要考虑类的具体名称, 直接按照类名对应的 key 来查找即可, 可以把 key 定义得通俗易懂, 方便代码的维护.
+ (NSDictionary*)modeList
{
   return @{@"1":[PTVRoomContentMode defaultModeName],
            STYLE_TYPE_ROOM_307 : @"PTVPandaRoomContentModel",
            STYLE_TYPE_CAT_TEAM : @"PTVCatBrigadeContentModel",
            STYLE_TYPE_ESPORTS : @"PTVESportsContentModel",
            };
}

调用方式如下:

NSString* modename = [[PTVRoomContentMode modeList] objectForKey:style_type];
PTVRoomContentMode* mode = [NSClassFromString(modename) new];

4. class 反射使用场景二: 遍历plist里面的字符串, 生成目标的类.

对于继承自同一个父类(如 NSObject )的多个子模块, 或遵守同一个协议(如 <NSObject> )的子模块, 可以将类名保存在 plist 文件里面, 按需创建子模块.

NSArray<NSString *> *moduleNames = [NSArray arrayWithContentsOfFile:plistFile];
for (NSString* class in moduleNames) {
        if (![class isKindOfClass:[NSString class]])
            continue;
        
        PXXRoomModule* module = [NSClassFromString(class) new];
        [self loadModule:module];
    }

相关文章

  • objc_property_t

    objc_property_t:iOS反射机制 iOS属性反射:说白了,就是将两个对象的所有属性,用动态的方式取出...

  • Java中的反射

    反射 今天我来分享下, 我关于Java中反射的理解。如果做过iOS开发的同学应该很清楚iOS里Runtime的黑魔...

  • iOS - 反射

    移动互联网下iOS客户端的开发,一般都会与服务端进行通讯,也会使用到Sqlite数据库来保存一些数据,按常规的搞法...

  • iOS 反射

    1. class反射 使用反射往往不需要导入头文件, 就可以剔除一些对象. 类似于分类, 不导入也会调用其中的 l...

  • iOS 反射

    什么是反射 类名、方法名、属性名和字符串在运行时相互转化的能力 反射方法 应用场景 1、代码模块化,解耦代码 2、...

  • iOS反射机制

    了解反射机制 Objective-C语言中的OC对象,都继承自NSObject类。这个类为我们提供了一些基础的方法...

  • iOS 反射操作

    判断一个对象是否为某种类型:(父类也会返回YES) isKindOfClass:[NSObject class] ...

  • iOS反射机制

    了解反射机制 Objective-C语言中的OC对象,都继承自NSObject类。这个类为我们提供了一些基础的方法...

  • iOS 反射机制

    // SEL和字符串转换 FOUNDATION_EXPORT NSString*NSStringFromSelec...

  • iOS反射机制

    该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> http://www.jianshu.co...

网友评论

      本文标题:iOS 反射

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