这个目标c属性综合警告是什么意思?
从升级到Xcode 5.1,我开始在我的项目使用的一些代码中看到以下警告。我想弄清楚这是什么意思。
警告:自动属性合成将不会合成属性“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将被生成,所以你可以删除警告 @implementation S3Response @dynamic responseHeader; ... @dynamic是对编译器的一个“承诺”,所有必需的访问器方法将会在运行时可用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |