分析Router中的Protocol方式和Category方式的优缺点

在Casa发布CTMeditor后,我们都知道router可以用targert-action的方式直接调起你需要的controller来做router。

但是这种形式存在的问题大家基本都提出了:就是硬编码问题,在编写Category的时候你不可避免的需要以硬编码的方式去写target和action以及参数转换。后来再此基础上,有人就结合蘑菇街的protocol形式来做,就是要抛出的东西,我以protocol的形式给出去,这样的话你就很清楚的知道你要调用什么,不需要中间硬编码的过程。

这是protocol形式解决的核心问题。唯一的不同,在于protocol需要依赖于业务本身。在硬编码和这个依赖之间的取舍,我看来硬编码问题还是要严重些的,所以推荐protocl结合CTMeditor的形式来做router可能更合适些。

和蘑菇街的老的url注册形式应该是不需要比较了,这个需要每个去注册url,管理url,成本太高。而且注册据说还有crash风险,虽然我没遇到过。

Category:
#pragma mark - category的形式
- (void)webBlock {
    UIViewController *controller = [[KZWRouter sharedRouter] kzw_KZWWebViewController:@"https%3a%2f%2fwww.zhihu.com%2f" callBackHandle:^(NSString *result) {
        NSLog(@"result:%@", result);
    }];
    [self presentViewController:[[UINavigationController alloc] initWithRootViewController:controller] animated:YES completion:nil];
}
复制代码
Protocol:
#pragma mark - protocol的形式
- (void)webAction {
    id<KZWWebView> KZWWebViewService = [[KZWRouter sharedRouter] findProtocolService:@protocol(KZWWebView)];
    UIViewController *controller = [KZWWebViewService kzw_KZWWebViewController:@"https%3a%2f%2fwww.zhihu.com%2f" callBackHandle:^(NSString *result) {
        NSLog(@"result:%@", result);
    }];
    [self presentViewController:[[UINavigationController alloc] initWithRootViewController:controller] animated:YES completion:nil];
}
复制代码

以上三种方式我都在自己的github中开源。

代码地址: Protocol和Category URL形式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值