objective-c - Objective-C 中的属性声明

标签 objective-c ios

<分区>

Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?

所以我发现在合成属性时必须使用下划线,这对我来说一点意义都没有。

那么,让我们开始吧。 在我们的 .h 文件中,我们写了这一行:

@property (nonatomic) double speed;

在我们的 .m 文件中,我们这样做:

@synthesize speed = _speed;

为什么?据我所知,property 生成一个实例变量并为其创建 setter 和 getter。 但是线到底是什么东西

@synthesize speed = _speed 

做吗? 正如常识告诉我的那样,我们将 _speed 中的值分配给速度。好的。 我们在哪里声明_speed?为什么编译器不给我们一个错误?这是什么意思?为什么要这么混淆的代码?

我的问题:

如果我这样做会怎样

@synthesize speed;

没有 _speed,我会出错或出现一些错误吗? 这个语法之后的原因是什么?制作时他们在想什么? _speed 从何而来?它是什么?它是指针还是实际值?这是怎么回事?

最佳答案

嗯,_speed 是属性使用的实例变量。如果你真的想完整地声明它,你需要这样写:

@interface Foo
{
    double _speed;
}

@property double speed;

@end

@implementation Foo

@synthetize speed = _speed;

@end

现在 Xcode 4.4 发布了,大部分内容都是不必要的,为了理智应该省略。

基本上,您所要做的就是:

@interface Foo

@property double speed;

@end

没有实例变量,没有@synthetize,一切仍然像以前一样工作。您可以使用 self.speedself->_speed 进行直接访问。

关于objective-c - Objective-C 中的属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459320/

相关文章:

ios - -(无效)scrollViewDidScroll :(UIScrollView *)scrollView too slow in iOS 8

iphone - 更改 UIButton 不同状态的渐变

Objective-c静态分析工具

iphone - 在 Objective-C 中是否有检测 AirPlay 的通知?

ios - 通过检查像 SKStoreProductParameterAffiliateToken 这样的常量的地址来完成什么?

ios - swift 将 JSON 数据显示到 socket

objective-c - 在 tableView 中获取 TextField 标识

ios - OpenGL ES 2.0 立方体贴图不显示纹理

objective-c - 将包含一些 CALayers 的 NSView 渲染到 NSImage

导航 View Controller 中的 IOS 图像选择器