【发布时间】:2014-09-17 04:57:08
【问题描述】:
我正在实现 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'
我们可能会讨论这个警告在这里是否有意义。但我想要实现的只是在不编写自己的设置器、使用 KV 编码或任何其他技巧的情况下摆脱警告。
奇怪的是,编译器可以使用presentedItemOperationQueue。
即使使用它也不能解决问题
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wall"
@property (copy) NSURL *presentedItemURL;
#pragma clang diagnostic pop
【问题讨论】:
-
这是一个clang错误。如果您正在查看github.com/llvm-mirror/clang/blob/master/lib/Sema/…
Sema::DiagnosePropertyMismatch有一个检查是检查列表。第一个检查继承的属性是否是可读写的,而另一个不是。这将产生一个警告。第二个检查是两个属性是否都是copy。如果一个是而另一个不是,它将生成上述警告。但是 clang 无法确定您的属性会导致警告的属性。也没有办法抑制这个警告。
标签: ios objective-c warnings clang compiler-warnings