首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电弧对实例的抱怨

电弧对实例的抱怨
EN

Stack Overflow用户
提问于 2014-01-16 20:28:01
回答 3查看 109关注 0票数 0

我试图将非ARC项目转换为使用ARC,但由于某种原因,它抱怨所有实例变量的使用。

代码语言:javascript
运行
复制
@property (nonatomic,retain)id myvariable;

结果:

代码语言:javascript
运行
复制
Error : "Use of undeclared variable _myvariable"

在我的代码中有一些地方,我不想修改保留计数,但是要对属性进行赋值。所以我使用一个实例变量。

添加@syhtnesize myvariable =_myvariable解决了这个问题,但我正在设法找出解决这个问题的正确方法。

可能的解决办法:

1)添加synthesize

2)用self.myvariable替换实例变量的使用,并将属性赋值。

编辑:问题ARC errors的扩展

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-16 22:28:32

听起来,您已经实现了向后兼容性功能。

由于Xcode 4.4属性声明不再需要@synthesize语句,而没有该语句,编译器将自动生成_propertyName实例变量。

但是,使用@synthesize propertyName,就像在Xcode 4.4之前一样,编译器将自动生成一个propertyName -注意到没有下划线实例变量。

警告您“使用未声明变量_myvariable”的编译器消息表明,您已经将代码切换为使用下划线,但仍然有一些@synthesize myvariable语句。

使用@synthesize myvariable = _myvariable可以直接为实例变量指定要使用的名称,从而解决了问题,但是完全删除@synthesize是通常的方法。

票数 1
EN

Stack Overflow用户

发布于 2014-01-16 20:32:40

带着所有弧形的东西

代码语言:javascript
运行
复制
@property (nonatomic, strong) Something *myVariable;

双方都可以访问

代码语言:javascript
运行
复制
self.myVariable;

代码语言:javascript
运行
复制
_myVariable;

不需要使用@合成

票数 3
EN

Stack Overflow用户

发布于 2014-01-16 20:33:31

这取决于你需要什么。如果你申报财产:

代码语言:javascript
运行
复制
@property (strong) NSString *myvariable;

您想要将私有ivar的名称更改为必须添加的不同的_myvariable

@synthesize myvariable = _myVarNewName

但是,如果您想使用前面带有下划线的完全相同的名称,只需删除@合成(适用于iOS 6和更高版本),编译器就可以执行其余的操作,这样就可以访问私有变量(如_myvariable )或公共变量(如self.myvariable )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21172172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档