所以我发现在合成属性时你必须使用下划线,这对我来说没有任何意义.
那么,让我们开始吧.在我们的.h文件中,我们写了这一行:
@property (nonatomic) double speed;
Run Code Online (Sandbox Code Playgroud)
在我们的.m文件中,我们这样做:
@synthesize speed = _speed;
Run Code Online (Sandbox Code Playgroud)
为什么?据我所知,property生成一个实例变量并为它创建setter和getter.但到底是怎么回事
@synthesize speed = _speed
Run Code Online (Sandbox Code Playgroud)
做?常识告诉我,我们将_speed中的值赋予速度.好的.我们在哪里宣布_speed?为什么编译器没有给我们错误?它应该是什么意思?为什么这样混淆代码?
我的问题在这里:
如果我这样做会发生什么
@synthesize speed;
Run Code Online (Sandbox Code Playgroud)
没有_speed,我会得到错误或一些错误吗?这种语法后的原因是什么?制作时他们在想什么?_speed来自哪里?它是什么?它是指针还是真正的价值?到底是怎么回事?
嗯,_speed是属性使用的实例变量.如果你真的想要完整地声明它,你需要写:
@interface Foo
{
double _speed;
}
@property double speed;
@end
@implementation Foo
@synthetize speed = _speed;
@end
Run Code Online (Sandbox Code Playgroud)
现在Xcode 4.4被释放了,大部分内容都是不必要的,为了理智,应该省略.
基本上,您所要做的就是:
@interface Foo
@property double speed;
@end
Run Code Online (Sandbox Code Playgroud)
没有实例变量,没有@synthetize,一切都像以前一样工作.您可以使用self.speed或self->_speed直接访问.
| 归档时间: |
|
| 查看次数: |
12054 次 |
| 最近记录: |