项目从AFN 2.0 迁移到 3.0,因为代码历史问题,需要通过NSURLSessionTask 获取到responseString,可是通过category 无法添加属性以及方法
由于category 中需要用到reposne 中的数据,所以也无法直接给 NSObject 添加category,各位大大,是否有好的解决方案
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
NSURLSessionTask 确实加不了 category,有点类似『不能继承』的问题。一般遇到这种问题有几种思路,你看看对应你的业务能不能用:
组合代替继承,定义一个 NSURLSessionTaskWrapper,里面有一个属性是那个 task,另外想加什么别的属性和方法都可以;用到 task 的部分可以直接用
wrapper.task,也可以写方法透传,比如当然,你控制得了自己的代码用
wrapper.task,但控制不了系统的代码,所以我不知道你的业务用不用得了。用 runtime 加属性、加方法。可以解决上面的『控制不了系统的代码』的问题,用 runtime 改过之后,在系统眼里这个类就多了这些属性、这些方法。不过不能加 category,我不知道 runtime 管用不管用。
外部存储。找找 sessionTask 有没有适合用作唯一 id 的属性,然后写一个 SessionTaskManager 类,新加的方法放在这个 manager 类里面;新加的属性,manager 可以存一个字典,以 sessionTask 的 id 为键,具体的属性为值,需要用到的时候,根据 id 来存取。
以上是几种常用的思路,你可以看看具体到你的业务是否适用~
2016年06月03日21:29:15 更新
题主可以看看上面的代码是否可以实现需求。