我正在摆弄Apple的AVCamDemo。除了试图解决所有问题之外,我遇到了一些我不理解的事情。
属性以非常奇怪的方式初始化,我没有找到任何解释。
在标题文件
中AVCaptureSession *_session;
...
@property (nonatomic,readonly,retain) AVCaptureSession *session;
<。>文件中的
@synthesize session = _session;
下划线的故事是什么?
感谢您的任何澄清!
答案 0 :(得分:2)
基本上,你有两件事在这里发生。一个ivar(实例变量)和属性。
如果你这样做
@synthesize session;
编译器假定ivar和属性具有相同的名称。
如果你这样做
@synthesize session = _session;
然后,属性名称为session
,ivar名称为_session
。
我的意见:
十多年来我一直在做Cocoa。而@synthesize session = _session;
是更安全的方式。当ivar和属性具有相同的名称时,编译器或程序员时不时会感到困惑。
答案 1 :(得分:1)
下划线是区分属性和实例变量的命名约定。
特别是,它有助于区分属性的赋值(自动减少和增加引用计数)和赋值实例变量(没有自动引用计数更新)。