2010-02-18 121 views
4

我是新來的ObjectiveC語言。 我無法理解內存管理語法。 我的代碼如下:iphone objectiveC alloc/release問題

NSDate* someDate; 
someDate=[[NSDate alloc] init]; 
loop 
{ 
    someDate=[[NSDate alloc] init]; 
} 

我會在這裏有內存泄漏嗎?或者返回的NSDate對象是[autorelease]?

謝謝

回答

4

您將有許多內存泄漏。如果通過名稱中具有新的,分配或複製的方法返回對象,則對象最初保留(不是自動釋放)。 [NSDate date]將被自動發佈。如果你發佈更多實質性代碼,我可以給你一些幫助,以便乾淨地完成你的目標。

也看看Apple's Memory Management Guide

+0

那麼它與alloc無關? – willcodejavaforfood 2010-02-18 09:02:19

+1

我認爲他的意思是在名稱中有alloc,new或copy的方法。 – 2010-02-18 09:06:31

+0

大衛..謝謝...這裏有更多的細節。 我的代碼的主要觀點是用循環中的「當前日期」更新「someDate」變量。 – 2010-02-18 09:14:04

5

正如@DavidKanarek所說,你會有泄漏。

有許多方法來解決這些泄漏:

NSDate* someDate; 
someDate=[NSDate date]; 
loop 
{ 
    someDate=[NSDate date]; 
} 

NSDate* someDate=nil; 
someDate=[[NSDate alloc] init]; 
loop 
{ 
    [someDate release]; 
    someDate=[[NSDate alloc] init]; 
} 

[someDate release]; 

第一個是代碼更容易閱讀,但第二個讓你的內存使用量下降低至可能。如果你的循環不太大,使用第一個。如果你經歷了數千次循環,我會用第二個。

山姆

1

該對象的所有權方案是通過引用計數系統,在內部跟蹤每個對象有多少業主有實施。當你聲明一個對象的所有權時,你增加它的引用計數,當你完成對象時,你減少它的引用計數。雖然其引用計數大於零,但確保對象存在,但只要計數達到零,操作系統就可以銷燬該對象。

http://rypress.com/tutorials/objective-c/memory-management

但在最新的xcode它提供ARC(自動引用計數)。
所以它會自動管理引用計數。當類釋放釋放它的內容所有對象的內存。

0

您將有很多內存泄漏。

someDate是一個poninter變量,並分配了一塊您分配的內存塊,在本例中爲[[NSDate alloc] init]

然而,在循環中,您將鼠標指針變量分配到另一個存儲bolck(someDate=[NSDate date]

作爲已分配的內存那些塊是未發佈時發生內存泄漏。