在支持旧 iOS 版本的同时使用新功能
Using new features while supporting older iOS versions
我正在使用 SDK 8.1、Apple LLVM 6.0 和 Xcode 6.1.1 开发应用程序。部署目标是 6.0。我正在使用 NSOperationQueue
,并且我想在可用时使用 QoS。
我使用的代码是:
if ([self.operationQueue respondsToSelector:@selector(setQualityOfService:)]
&& (&NSOperationQualityOfServiceUserInitiated)) {
[self.operationQueue performSelector:@selector(setQualityOfService:) withObject: NSOperationQualityOfServiceUserInitiated];
} else {
//Other stuff not related to the scope of this question
}
我得到的错误是:
Use of undeclared identifier 'NSOperationQualityOfServiceUserInitiated'
我添加了 if (&NSOperationQualityOfServiceUserInitiated)
部分来检查这个常量是否存在。此代码适用于旧版本的 Xcode/Obj-C 编译器。
我可以将选择器与 performSelectorWithIdentifier
一起使用,但是那些在文档中没有定义值的常量呢?此常量的值由 NSQualityOfServiceUserInitiated
设置,但没有可以硬编码的此值的定义。
我该如何解决?
代码有几处错误。
NSOperationQualityOfServiceUserInitiated
是原生类型 (NSInteger
),因此您不能像在任何一行中那样使用它。
qualityOfService
是类型 NSQualityOfService
的 属性。您尝试将参数传递给 qualityOfService
方法(getter 方法)没有任何意义。如果你想设置服务质量,你需要调用 setter 但你不能使用 performSelector
.
你想要:
if ([self.operationQueue respondsToSelector:@selector(qualityOfService)]) {
self.operationQueue.qualityOfService = NSOperationQualityOfServiceUserInitiated;
} else {
//Other stuff not related to the scope of this question
}
只要您的 Base SDK 是 iOS 8.0 或更高版本,此代码就可以正常编译。部署目标无关紧要。
如果您还想使用 Xcode 5 或更早版本(iOS 7 或更早版本的 Base SDK)构建此代码,则需要使用正确的编译器指令包装代码以进行检查对于基础 SDK。
我正在使用 SDK 8.1、Apple LLVM 6.0 和 Xcode 6.1.1 开发应用程序。部署目标是 6.0。我正在使用 NSOperationQueue
,并且我想在可用时使用 QoS。
我使用的代码是:
if ([self.operationQueue respondsToSelector:@selector(setQualityOfService:)]
&& (&NSOperationQualityOfServiceUserInitiated)) {
[self.operationQueue performSelector:@selector(setQualityOfService:) withObject: NSOperationQualityOfServiceUserInitiated];
} else {
//Other stuff not related to the scope of this question
}
我得到的错误是:
Use of undeclared identifier 'NSOperationQualityOfServiceUserInitiated'
我添加了 if (&NSOperationQualityOfServiceUserInitiated)
部分来检查这个常量是否存在。此代码适用于旧版本的 Xcode/Obj-C 编译器。
我可以将选择器与 performSelectorWithIdentifier
一起使用,但是那些在文档中没有定义值的常量呢?此常量的值由 NSQualityOfServiceUserInitiated
设置,但没有可以硬编码的此值的定义。
我该如何解决?
代码有几处错误。
NSOperationQualityOfServiceUserInitiated
是原生类型 (NSInteger
),因此您不能像在任何一行中那样使用它。qualityOfService
是类型NSQualityOfService
的 属性。您尝试将参数传递给qualityOfService
方法(getter 方法)没有任何意义。如果你想设置服务质量,你需要调用 setter 但你不能使用performSelector
.
你想要:
if ([self.operationQueue respondsToSelector:@selector(qualityOfService)]) {
self.operationQueue.qualityOfService = NSOperationQualityOfServiceUserInitiated;
} else {
//Other stuff not related to the scope of this question
}
只要您的 Base SDK 是 iOS 8.0 或更高版本,此代码就可以正常编译。部署目标无关紧要。
如果您还想使用 Xcode 5 或更早版本(iOS 7 或更早版本的 Base SDK)构建此代码,则需要使用正确的编译器指令包装代码以进行检查对于基础 SDK。