我想对URLSessionConfiguration进行子类化,以为超时间隔和httpHeaders等属性设置一些默认值。所以我附带了这个自定义子类。
class CustomSessionConfiguration: URLSessionConfiguration {
init(time: TimeInterval) {
super.init()
timeoutIntervalForResource = time
}
}
但是当我实例化CustomSessionConfiguration
时,由于以下原因导致了崩溃:
-[CustomSessionConfiguration setTimeoutIntervalForResource:]: unrecognized selector sent to instance 0x6000021b76c0
似乎我的子类没有继承timeoutIntervalForResource
的setter方法。请注意,类的其他属性,例如httpAdditionalHeaders
也会发生同样的情况。
答案 0 :(得分:1)
在更仔细地检查了URLSessionConfiguration
的文档之后,我注意到init()
被标记为已弃用。这清楚地表明该类并非像我以前那样被子类化。特别是在我的子类的init中对super.init()
的调用可能创建了一个“损坏的”实例。
此外,如果我使用default
类方法创建实例:
let config = URLSessionConfiguration.default
print(type(of: config))
我得到的值__NSCFURLSessionConfiguration
清楚地表明NSURLSessionConfiguration
可能被实现为Class Cluster,这可能就是CustomSessionConfiguration
不继承属性访问器的原因