自我的主要用途是什么?

时间:2012-10-10 11:40:33

标签: objective-c xcode self

我正在开发一个基于ARC的项目。我只是想知道自我的主要用途是什么?

我有一个数组如下

@property(strong,nonatomic)NSMutable *dataArray;

我正在按如下方式初始化数组

-(void)viewDidLoad{

 self.dataArray=[[NSMutableArray alloc]initWithObjects:@"one",@"two",nil];  //first method

}

-(void)viewDidLoad{

 dataArray=[[NSMutableArray alloc]initWithObjects:@"one",@"two",nil];  //second method

}

谁能告诉我第一种和第二种方法有什么区别?

2 个答案:

答案 0 :(得分:4)

第一次调用:self.dataArray = ...调用self的访问者方法,如下所示:[self setDataArray:...]

第二次调用:dataArray = ...定义名为dataArray的实例变量(ivar)的内容。

这不是一回事。

答案 1 :(得分:1)

经过大量的谷歌搜索后,我找到了问题的答案,

@property(非原子,保留)NSDate *时间戳;

Objective C将生成getter和setter,如下所示

(NSDate *)timestamp
{
   return timestamp;
}

(void)setTimestamp:(NSDate *)newValue
{
   if (timestamp != newValue)
   {
      [timestamp release];

      timestamp = [newValue retain];
   }
}

只能按如下方式调用setter方法

self.timestamp = [NSDate date];

其中

timestamp = [NSDate date];

不会调用setter方法。

如果没有自我对象和点,我们不再向对象发送消息,而是

直接访问名为timestamp的ivar。

结论:当我们不使用self时,旧的值不会被释放,因为setter

不会调用

方法,即在ARC之前。但在ARC中,我对此并不十分肯定。到目前为止

正如我所听到的,使用ARC,设置ivar的任何方式都是正确的内存管理

担心。