我正在实现NSFilePresenter协议:
@protocol NSFilePresenter <NSObject>
@required
@property (readonly, copy) NSURL *presentedItemURL;
@property (readonly, retain) NSOperationQueue *presentedItemOperationQueue;
@end
当然,我也想在内部访问
presentedItemURL
和presentedItemOperationQueue
。因此,我声明了以下私有接口:@interface MyClass () <NSFilePresenter>
@property (copy) NSURL *presentedItemURL;
@property (retain) NSOperationQueue *presentedItemOperationQueue;
@end
但presentedItemURL
会返回一个警告:
'copy' attribute on property 'presentedItemURL' does not match the property inherited from 'NSFilePresenter'
我们可能会讨论这个警告是否有意义。但我想要的只是在不编写自己的setter、使用KV编码或任何其他技巧的情况下消除这个警告。 奇怪的是,编译器对于
presentedItemOperationQueue
是没有问题的。
即使使用这个也无法解决问题。#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wall"
@property (copy) NSURL *presentedItemURL;
#pragma clang diagnostic pop
Sema::DiagnosePropertyMismatch
,那么有一系列检查。第一个检查是检查继承的属性是否为readwrite,而另一个则不是。这将生成一个警告。 第二个检查是如果两个属性都是“copy”。如果其中一个是,而另一个不是,则会生成上述警告。但是clang无法确定您的属性的属性,这将导致警告。此外,没有方法可以抑制此警告。 - McZonk