我正在实施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
答案 0 :(得分:0)
我通过使用默认说明符(而不说明任何内容)来解决此问题。例如:
@interface MyClass () <NSFilePresenter>
@property NSURL *presentedItemURL;
@property NSOperationQueue *presentedItemOperationQueue;
@end
在现代Objective-C中,这意味着引用了atomic
和strong
。