区块链技术博客
www.b2bchain.cn

iOS开发之 runtime(39) :runtime应用之组件间通讯求职学习资料

本文介绍了iOS开发之 runtime(39) :runtime应用之组件间通讯求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

组件间通讯这个议题应该不新鲜了,太多的文章说明 iOS 组件之间通讯的,本文不是为了带大家实现一个通讯方案,而是我们通过实现一个简单又非常实用的组件间通讯库,来从侧面说明了 runtime 强大能力。

常见的组件间通讯的方案有

  • URL Router
  • Target-Action

其中 URL Router 的问题是硬编码太多,如果字符串写偏了的话,可能导致调用失败;另一个问题是规则会比较复杂,只要带上对象参数,那复杂度就指数级上升了。

Target-Action 方式是相对来说比较清晰明了的方式,在一个组件中直接把需要暴露的组件入口文件(我们暂且规定类名中包含 “Module” 字符串的文件)放在一个文件中,供外部调用。

核心代码如下:

#import <Foundation/Foundation.h> #import <objc/objc.h>  typedef BOOL(^PredicateBlock)(Class cls);  inline NSArray<Class> *getClassesMatching(PredicateBlock predicate) {   NSMutableArray *array = [NSMutableArray array];    unsigned int count;   Class cls;   Class * classes = objc_copyClassList(&count);   for (int i = 0; i < count; i++) {     cls = classes[i];     if (predicate(cls)) {       [array addObject:cls];     }   }   free(classes);   return array; }

这串代码中,最核心的部分莫过于 runtime 中的方法objc_copyClassList,他能拿到当前工程中的所有类。

组件间通讯这个议题应该不新鲜了,太多的文章说明 iOS 组件之间通讯的,本文不是为了带大家实现一个通讯方案,而是我们通过实现一个简单又非常实用的组件间通讯库,来从侧面说明了 runtime 强大能力。

常见的组件间通讯的方案有

  • URL Router
  • Target-Action

其中 URL Router 的问题是硬编码太多,如果字符串写偏了的话,可能导致调用失败;另一个问题是规则会比较复杂,只要带上对象参数,那复杂度就指数级上升了。

Target-Action 方式是相对来说比较清晰明了的方式,在一个组件中直接把需要暴露的组件入口文件(我们暂且规定类名中包含 “Module” 字符串的文件)放在一个文件中,供外部调用。

核心代码如下:

#import <Foundation/Foundation.h> #import <objc/objc.h>  typedef BOOL(^PredicateBlock)(Class cls);  inline NSArray<Class> *getClassesMatching(PredicateBlock predicate) {   NSMutableArray *array = [NSMutableArray array];    unsigned int count;   Class cls;   Class * classes = objc_copyClassList(&count);   for (int i = 0; i < count; i++) {     cls = classes[i];     if (predicate(cls)) {       [array addObject:cls];     }   }   free(classes);   return array; }

这串代码中,最核心的部分莫过于 runtime 中的方法objc_copyClassList,他能拿到当前工程中的所有类。

组件间通讯这个议题应该不新鲜了,太多的文章说明 iOS 组件之间通讯的,本文不是为了带大家实现一个通讯方案,而是我们通过实现一个简单又非常实用的组件间通讯库,来从侧面说明了 runtime 强大能力。

常见的组件间通讯的方案有

  • URL Router
  • Target-Action

其中 URL Router 的问题是硬编码太多,如果字符串写偏了的话,可能导致调用失败;另一个问题是规则会比较复杂,只要带上对象参数,那复杂度就指数级上升了。

Target-Action 方式是相对来说比较清晰明了的方式,在一个组件中直接把需要暴露的组件入口文件(我们暂且规定类名中包含 “Module” 字符串的文件)放在一个文件中,供外部调用。

核心代码如下:

#import <Foundation/Foundation.h> #import <objc/objc.h>  typedef BOOL(^PredicateBlock)(Class cls);  inline NSArray<Class> *getClassesMatching(PredicateBlock predicate) {   NSMutableArray *array = [NSMutableArray array];    unsigned int count;   Class cls;   Class * classes = objc_copyClassList(&count);   for (int i = 0; i < count; i++) {     cls = classes[i];     if (predicate(cls)) {       [array addObject:cls];     }   }   free(classes);   return array; }

这串代码中,最核心的部分莫过于 runtime 中的方法objc_copyClassList,他能拿到当前工程中的所有类。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » iOS开发之 runtime(39) :runtime应用之组件间通讯求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们