[英]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.