关于对 NSURLSessionTask 添加 category

本文是 https://segmentfault.com/q/1010000005624591 引申出来的一个“NSURLSessionTask 是否可以添加 category”的研究文章。

http://stackoverflow.com/questions/24448936/nsurlsessiontask-category-method-crashes-with-unrecognized-selector-sent-to-ins
提到对NSURLSessionTask添加category后,在运行时会发生

unrecognized selector sent to instance

但是根据下面的实验结果,在iPhone 6 plus + iOS 9.3 的测试环境下,是可以找到对应的实现。

关于对 NSURLSessionTask 添加 category_第1张图片
Paste_Image.png
关于对 NSURLSessionTask 添加 category_第2张图片
Paste_Image.png

另外,http://stackoverflow.com/a/35359533 中提到在iOS 9.2中 __NSCFLocalDataTask的继承链是__NSCFLocalDataTask: __NSCFLocalSessionTask:__NSCFURLSessionTask:NSObject.
所以,该问题应该只能在一些特殊的版本中才会发生。

根据问题截图,现在能猜测问题的另一个原因很可能是 Linker 在 处理 category 时会发生的一个隐藏bug。关于隐藏bug的讨论可以移步到
https://developer.apple.com/library/mac/qa/qa1490/_index.html

你可能感兴趣的:(关于对 NSURLSessionTask 添加 category)