我正在使用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
}
我得到的错误是:
使用未声明的标识符'NSOperationQualityOfServiceUserInitiated'
我添加了if (&NSOperationQualityOfServiceUserInitiated)
部分以检查此常量是否存在。此代码适用于旧版本的Xcode / Obj-C编译器。
我能够使用performSelectorWithIdentifier
的选择器,但是在文档中没有定义值的常量呢?此常量的值由NSQualityOfServiceUserInitiated
设置,但此值没有可以硬编码的定义。
我该如何解决?
答案 0 :(得分:0)
代码有几个问题。
NSOperationQualityOfServiceUserInitiated
是原生类型(NSInteger
),因此您无法按照自己的方式使用它。qualityOfService
是NSQualityOfService
类型的属性。您尝试将参数传递给qualityOfService
方法(getter方法)是没有意义的。如果您尝试设置服务质量,则需要致电设置器,但无法使用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)构建此代码,则需要使用适当的编译器指令包装代码以检查Base SDK。