我正在实现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发布于 2018-08-22 12:44:32
我通过使用默认说明符(并且不声明任何)修复了这个问题。对于您的示例:
@interface MyClass () <NSFilePresenter>
@property NSURL *presentedItemURL;
@property NSOperationQueue *presentedItemOperationQueue;
@end在现代Objective-C中,这意味着atomic和strong引用。
https://stackoverflow.com/questions/24954004
复制相似问题