我正在开发一个基于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
}
谁能告诉我第一种和第二种方法有什么区别?
答案 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的任何方式都是正确的内存管理
担心。