2012-10-10 59 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

相關問題