• iOS 三种路由对比(TargetAction,Protocol, URL)


    RouterApp

    介绍

    三种经典路由介绍,URL路由,Protocol路由 , Target-Action路由

    Target-Action

    优点

    1. 无需注册路由,避免了load里注册影响启动速度
    2. 不用维护全局路由表,避免了查找对应路由
    3. 统一了路由入口
    4. 进行了一定的安全处理
    

    缺点

    1. 不能多端使用同一套路由H5,Android
    2. 增加了文件,同时在获取target,sel时存在一定的硬编码
    

    核心实现

      利用Runtime,结合一部分硬编码来实现路由的调用
    ```
    

    [target performSelector:action withObject:params]
    ```

    注意事项

    通过NSInvocation的getReturnValue时,如果是对象类型,在用id类型接受时,引用计数没有加一,需要特殊处理;直接使用可能造成Crash。可以通过 (__bridge id)xxx 来解决内存管理的问题
     ```
         if (strcmp(signature.methodReturnType, @encode(NSString)) == 0) {
        NSInvocation *invocation = [[NSInvocation alloc] init];
        [invocation setArgument:&params atIndex:2];
        invocation.target = target;
        id result;
        [invocation invoke];
        [invocation getReturnValue:&result];        
        return result;
    }
     ```
    

    Protocol路由

    优点

    1. 符合swift的思想, 面向协议编程
    2. 安全性高,在编译阶段就可以检测出问题
    3. 模块解耦
    

    缺点

    1. 无法多端通用
    2. 需要进行协议的注册
    

    核心实现

     类似与URL路由,通过注册的协议表找到对应的注册的实体。之后执行实体实现的协议方法
    

    URL路由

    优点

    1. 多端通用
    2. 统一路由入口
    3. 学习成本低,易使用
    

    缺点

    1. 需要load注册
    2. 涉及硬编码
    3. 只能通过字典传参
    

    核心实现

    通过注册路由,来维护一张路由表,在调用路由时,通过路由查找对应的实现。注意路由中传递的参数。
    

    路由实例

  • 相关阅读:
    函数基础
    全局变量与类似配置文件的模块文件
    global语句(python学习手册422页)
    作用域实例
    变量名解析:LEGB原则
    作用域
    第三方库安装方法
    s[-1]和s[len(s)-1]
    查找特定后缀的文件
    logging日志管理-将日志写入文件
  • 原文地址:https://www.cnblogs.com/jisa/p/16374801.html
Copyright © 2020-2023  润新知