-1

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

我有一个数组如下

@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

}

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

4

2 回答 2

4

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

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

那不是一回事。

于 2012-10-10T11:45:11.897 回答
1

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

@property (nonatomic, 保留) NSDate *timestamp;

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

(NSDate *)timestamp
{
   return timestamp;
}

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

      timestamp = [newValue retain];
   }
}

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

self.timestamp = [NSDate 日期];

然而

时间戳=[NSDate 日期];

不调用 setter 方法。

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

直接访问名为时间戳的 ivar。

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

方法不会被调用,即在 ARC 之前。但在 ARC 中,我对此不太确定。至于

正如我所听说的,对于内存管理而言,使用 ARC 设置 ivar 的任何一种方式都是正确的

被关注到。

于 2012-10-10T12:06:54.937 回答