2012-10-10 33 views
-1

我正在开发基于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

我可以知道我的问题出了什么问题吗?有人投下了它 – Raj

+0

你可以很容易地找到答案只是通过使用谷歌 –

+0

基本的想法是,你可以使用第二种方法,因为除了属性之外,你还在头文件中声明了一个实例变量'NSArray * dataArray;'文件。然后,当你尝试alloc/init时,dataArray是iVar,self.dataArray是属性。 –

回答

1

很多谷歌上搜索后,我找到了答案,我的问题,

@属性(非原子,保留)的NSDate *时间戳;

目标C如下

(NSDate *)timestamp 
{ 
    return timestamp; 
} 

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

     timestamp = [newValue retain]; 
    } 
} 

setter方法只能如下

self.timestamp = [NSDate的日期]被调用将产生getter和setter;

其中作为

时间戳= [NSDate的日期];

不调用setter方法。

没有自我的对象,我们不再发送对象的消息,但

直接访问名为时间戳伊娃点。

结论:如果我们不使用自我,旧值不会被释放,因为二传手

方法将不会被调用,即在此之前ARC.But在ARC我不是很肯定this.As远

,因为我听说,随着ARC设置伊娃的两种方式是正确的,只要内存管理

关注。

+0

我相信你的结论是ARC下的一个不正确的假设。在ARC之前,你是正确的,并且由于这是一个很好的习惯,总是使用setter方法。使用ARC无论是设置伊瓦尔的方式,就内存管理而言都是正确的(http://stackoverflow.com/questions/7986954/is-self-ivar-necessary-for-strong-properties-with-arc)。此外,这是命名ivars不同于属性名称的一个很好的理由,因此您可以轻松区分使用属性和ivar。 – Ryan

+0

哦,好的。我知道这一点。我会检查一次,然后删除结论部分。 – Raj

+0

以下是我在初次查看时发现的有用问题。 http://stackoverflow.com/questions/10038302/objective-c-custom-setter-with-arc – Ryan

4

第一调用:self.dataArray = ...调用的self存取器方法,这样的:[self setDataArray:...]

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

这不是一回事。

+0

你可以扩展自我效应的不同之处吗? dataArray = ...&dataArray = ...? – nerak99

相关问题