警告:自动属性合成将不会合成属性“responseheader”,因为它是“reaDWrite”,但它将通过另一个属性合成“Readonly”
在.m文件中出现的代码:
@interface S3Response ()@property (nonatomic,reaDWrite,retain) NSDictionary *responseheader;@end
以前声明的属性,在.h文件中:
@property (nonatomic,Readonly) NSDictionary *responseheader;
没有该属性的@synthesize语句,也不会将responseheader或setResponseheader定义为方法。然而,有一个名为responseheader的ivar的明确定义。
似乎对我来说非常简单:属性被声明为只读类的用户,但是在本地读写,所以该类可以设置它。
这个警告是什么意思,我该怎么办?
解决方法 该代码似乎是从 AWS SDK for iOS,而S3Response是AmazonServiceResponse的一个子类。
public AmazonServiceResponse接口定义了只读属性
@interface AmazonServiceResponse:NSObject// ...@property (nonatomic,Readonly) NSDictionary *responseheader;@end
它在实现文件中的类扩展中被重新定义为读写:
@interface AmazonServiceResponse ()@property (nonatomic,retain) NSDictionary *responseheader;@end
现在S3Response的子类也希望对这个属性进行读写访问,
因此也在其实现文件的类扩展中定义:
@interface S3Response ()@property (nonatomic,retain) NSDictionary *responseheader;@end
编译器抱怨因为 – 编译“S3Response.m”时 – 它不知道
该属性的setter存在于超类中(它不读取)
此时超类的实现文件)。编译器也不行
只是在子类中合成一个setter,因为它不能知道那个
属性由超类中的实例变量备份。
但是你知道一个setter将被生成,所以你可以删除警告
在子类实现中添加一个@dynamic声明:
@implementation S3Response@dynamic responseheader;...
@dynamic是对编译器的一个“承诺”,所有必需的访问器方法将会在运行时可用。
总结以上是内存溢出为你收集整理的这个目标c属性综合警告是什么意思?全部内容,希望文章能够帮你解决这个目标c属性综合警告是什么意思?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)