簡體   English   中英

iphone objectiveC alloc / release問題

[英]iphone objectiveC alloc/release question

我是ObjectiveC語言的新手。 我無法理解內存管理語法。 我的代碼如下:

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

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

謝謝

正如@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];

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

山姆

你會有很多內存泄漏。 如果對象在名稱中具有new,alloc或copy的方法返回,則它們最初會保留(不是自動釋放)。 [NSDate date]將自動釋放。 如果您發布更實質性的代碼,我可以幫助您完全實現目標。

另請參閱Apple的內存管理指南

此對象所有權方案通過引用計數系統實現,該系統內部跟蹤每個對象擁有多少所有者。 當您聲明對象的所有權時,您會增加它的引用計數,並且當您完成對象時,您會減少其引用計數。 當它的引用計數大於零時,保證存在一個對象,但是一旦計數達到零,就允許操作系統銷毀它。

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

但在最新的xcode中它提供ARC(自動引用計數)。
因此它將自動管理引用計數。當類被釋放時,它釋放內容中的所有對象的內存。

你將有很多內存泄漏。

someDate是一個poninter變量,並分配了一個你分配的內存塊,在這種情況下是[[NSDate alloc] init]

但是,在循環中,您將指針變量分配給另一個內存bolck( someDate=[NSDate date]

由於那些已分配的內存塊未釋放,因此發生內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM