ios - AFN 3.0 迁移 以及 NSURLSessionTask category的问题
高洛峰
高洛峰 2017-04-18 09:06:28
[iOS讨论组]

项目从AFN 2.0 迁移到 3.0,因为代码历史问题,需要通过NSURLSessionTask 获取到responseString,可是通过category 无法添加属性以及方法

由于category 中需要用到reposne 中的数据,所以也无法直接给 NSObject 添加category,各位大大,是否有好的解决方案

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
PHP中文网

NSURLSessionTask 确实加不了 category,有点类似『不能继承』的问题。一般遇到这种问题有几种思路,你看看对应你的业务能不能用:

  1. 组合代替继承,定义一个 NSURLSessionTaskWrapper,里面有一个属性是那个 task,另外想加什么别的属性和方法都可以;用到 task 的部分可以直接用 wrapper.task,也可以写方法透传,比如

    - (NSInteger)someProperty {
        return self.task.someProperty;
    }

    当然,你控制得了自己的代码用wrapper.task,但控制不了系统的代码,所以我不知道你的业务用不用得了。

  2. 用 runtime 加属性、加方法。可以解决上面的『控制不了系统的代码』的问题,用 runtime 改过之后,在系统眼里这个类就多了这些属性、这些方法。不过不能加 category,我不知道 runtime 管用不管用。

  3. 外部存储。找找 sessionTask 有没有适合用作唯一 id 的属性,然后写一个 SessionTaskManager 类,新加的方法放在这个 manager 类里面;新加的属性,manager 可以存一个字典,以 sessionTask 的 id 为键,具体的属性为值,需要用到的时候,根据 id 来存取。

以上是几种常用的思路,你可以看看具体到你的业务是否适用~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号