我看到了带有此代码的示例代码:
<。>文件中的:
CALayer *_animationLayer;
@property (nonatomic, retain) CALayer *animationLayer;
在.m文件中:
@synthesize animationLayer = _animationLayer;
我猜它与保留计数有关?
有人可以解释一下吗?
答案 0 :(得分:2)
将其视为变量名的别名。
@synthesize
的语法也是 包括允许您的扩展 使用不同的名称 property及其实例变量 存储。例如,考虑一下 以下声明:
@synthesize title, directReports, role = jobDescrip;
这告诉计算机合成访问器方法 属性
title
,directReports
和role
,并使用jobDescrip
用于支持role
的实例变量 属性。强>
答案 1 :(得分:1)
.h文件中的代码声明了两件事,一个名为_animationLayer
的变量CALayer*
,一个名为animationLayer
的属性,其类型为{{1} }}。 .m文件中的代码指示objective-c编译器自动为CALayer*
属性生成getter和setter,使用animationLayer
变量来保存设置的实际值。
例如:
_animationLayer
而且你是对的,这确实与对象的retainCount有一些关系(因此将变量视为属性的直接别名并不完全正确)。实质上,使用_animationLayer = nil; //initialize the variable to nil
self.animationLayer = [[CALayer alloc] init]; //assign a value to the property
NSLog("_animationLayer is: %@", _animationLayer); //it's not set to nil anymore
_animationLayer = nil; //set it to nil again
NSLog("self.animationLayer is: %@", self.animationLayer); //now the property is nil
变量直接设置值不会保留新值或释放旧值。使用属性访问器设置值。例如:
_animationLayer