加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

这个目标c属性综合警告是什么意思?

发布时间:2020-12-15 01:54:57 所属栏目:百科 来源:网络整理
导读:从升级到Xcode 5.1,我开始在我的项目使用的一些代码中看到以下警告。我想弄清楚这是什么意思。 警告:自动属性合成将不会合成属性“responseHeader”,因为它是“readwrite”,但它将通过另一个属性合成“readonly” 在.m文件中出现的代码: @interface S3R
从升级到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存在于超类中(它不读取)
此时超类的实现文件)。编译器也不行
只是在子类中合成一个setter,因为它不能知道那个
属性由超类中的实例变量备份。

但是你知道一个setter将被生成,所以你可以删除警告
在子类实现中添加一个@dynamic声明:

@implementation S3Response
@dynamic responseHeader;
...

@dynamic是对编译器的一个“承诺”,所有必需的访问器方法将会在运行时可用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读