以前所未有的方式保留财产?

时间:2011-03-20 07:33:17

标签: objective-c retain getter-setter

我看到了带有此代码的示例代码:

<。>文件中的

  CALayer *_animationLayer;
  @property (nonatomic, retain) CALayer *animationLayer;

在.m文件中:

  @synthesize animationLayer = _animationLayer;

我猜它与保留计数有关?

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

将其视为变量名的别名。

来自Cocoa Fundamentals Guide

  

@synthesize的语法也是   包括允许您的扩展   使用不同的名称   property及其实例变量   存储。例如,考虑一下   以下声明:

@synthesize title, directReports, role = jobDescrip;
  

这告诉计算机合成访问器方法   属性titledirectReports和   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