AVFoundation - 财产声明 - 基本问题

时间:2011-04-05 16:37:11

标签: iphone avfoundation

我正在摆弄Apple的AVCamDemo。除了试图解决所有问题之外,我遇到了一些我不理解的事情。

属性以非常奇怪的方式初始化,我没有找到任何解释。

在标题文件

AVCaptureSession *_session;

...

@property (nonatomic,readonly,retain) AVCaptureSession *session;
<。>文件中的

@synthesize session = _session;

下划线的故事是什么?

感谢您的任何澄清!

2 个答案:

答案 0 :(得分:2)

基本上,你有两件事在这里发生。一个ivar(实例变量)和属性。

  • ivar是实际变量。
  • 该属性是getter和setter的语法糖。

如果你这样做

@synthesize session;

编译器假定ivar和属性具有相同的名称。

如果你这样做

@synthesize session = _session;

然后,属性名称为session,ivar名称为_session

我的意见: 十多年来我一直在做Cocoa。而@synthesize session = _session;是更安全的方式。当ivar和属性具有相同的名称时,编译器或程序员时不时会感到困惑。

答案 1 :(得分:1)

下划线是区分属性和实例变量的命名约定。

特别是,它有助于区分属性的赋值(自动减少和增加引用计数)和赋值实例变量(没有自动引用计数更新)。