Objective-C中的属性声明

Dvo*_*ole 4 objective-c ios

可能重复:
cocoa objective-c类中变量前面的下划线如何工作?

所以我发现在合成属性时你必须使用下划线,这对我来说没有任何意义.

那么,让我们开始吧.在我们的.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来自哪里?它是什么?它是指针还是真正的价值?到底是怎么回事?

fab*_*ier 5

嗯,_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.speedself->_speed直接访问.


归档时间:

查看次数:

12054 次

最近记录:

13 年,5 月 前