美文网首页
iOS 中的反射

iOS 中的反射

作者: wesk痕 | 来源:发表于2017-03-13 11:54 被阅读0次

最近在学习Server,再重温Java 代码,对比OC后,有着诸多的感触,其中最深的是:Java中的反射使用是如此的频繁和巧妙,对比OC,我们知道OC中也有反射的。
OC下的反射的使用 在NSObjcRuntime类中体现,我们知道OC语言是动态的,使用起来比较灵巧。

NSString和SEL转换
FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);

NSString和NSClass转换
FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
FOUNDATION_EXPORT Class _Nullable NSClassFromString(NSString *aClassName);

NSString和Protocol转换
FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0);
FOUNDATION_EXPORT Protocol * _Nullable NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0);

类的实例化,方法,还有协议都可以用反射的方法实现,就目前我所使用过的代码,印象最深的是,类的实例化使用,大多数app使用过这个场景: app推送了一条消息:需要实现跳转到某个界面,执行一些操作。对于这个场景我们需要在推送的消息内容中带上什么? 一般的app实现都会是通过字典。
我做的App是IM居多,下面说一下靠推送实现快速给好友发消息,即跳转到TalkViewController界面

{
     "class" : "TalkViewController",
     "method" : "sendMessage",
     "property" : {
          "friendId":18768177600,
          "msgType":2,
          "sessionType”:1
          ...
                    }
};

class: 操作的类
method:类需要实现的方法
property:附加的必要参数

OC动态语言比java多了一个重要功能,可以动态的在类中注入实现类和方法,利用了runtime

//注入类
    // Default case. Create dynamic subclass.
    const char *subclassName = [className stringByAppendingString:AspectsSubclassSuffix].UTF8String;
    Class subclass = objc_getClass(subclassName);

    if (subclass == nil) {
        subclass = objc_allocateClassPair(baseClass, subclassName, 0);
        ...
    }

//注入方法
class_addMethod(class, selector,  method_getImplementation(method),  method_getTypeEncoding(method));

反射的优点:松耦合,可以对象之间的依赖,实现很多原先比较麻烦的场景。

反射的缺点:性能略微低,通过字符串匹配内存中的实现,效率没有直接引用高。
代码可读性低,对象之间的一些逻辑不能直观体现。

总结:反射是编程中的一个重要特点,在实际开发过程中需要我们合理运用,能提高代码的质量,尤其是在架构的过程中。

相关文章

  • iOS 中的反射

    最近在学习Server,再重温Java 代码,对比OC后,有着诸多的感触,其中最深的是:Java中的反射使用是如此...

  • Java中的反射

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

  • iOS中的反射机制

    https://github.com/starainDou 欢迎点星 iOS反射机制:运行时选择创建哪个实例,并动...

  • iOS中的反射技术

    反射技术简单应用就是把 根据字符串创建类/调用方法/协议等。 把类名/方法名/协议名 转化字符串的优势: iOS中...

  • objc_property_t

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

  • iOS - 反射

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

  • iOS 反射

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

  • iOS 反射

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

  • 反射机制及其在iOS中的应用

    最古老的计算机编程使用母语汇编语言,它本质上是反射的,因为这些原始的架构可以通过定义指令作为数据,并使用自修改代码...

  • PHP Reflection 反射

    反射 ReflectionClass 类 PHP反射机制 反射在 PHP 中的应用

网友评论

      本文标题:iOS 中的反射

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