我是新來的ObjectiveC語言。 我無法理解內存管理語法。 我的代碼如下:iphone objectiveC alloc/release問題
NSDate* someDate;
someDate=[[NSDate alloc] init];
loop
{
someDate=[[NSDate alloc] init];
}
我會在這裏有內存泄漏嗎?或者返回的NSDate對象是[autorelease]?
謝謝
我是新來的ObjectiveC語言。 我無法理解內存管理語法。 我的代碼如下:iphone objectiveC alloc/release問題
NSDate* someDate;
someDate=[[NSDate alloc] init];
loop
{
someDate=[[NSDate alloc] init];
}
我會在這裏有內存泄漏嗎?或者返回的NSDate對象是[autorelease]?
謝謝
您將有許多內存泄漏。如果通過名稱中具有新的,分配或複製的方法返回對象,則對象最初保留(不是自動釋放)。 [NSDate date]
將被自動發佈。如果你發佈更多實質性代碼,我可以給你一些幫助,以便乾淨地完成你的目標。
正如@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];
第一個是代碼更容易閱讀,但第二個讓你的內存使用量下降低至可能。如果你的循環不太大,使用第一個。如果你經歷了數千次循環,我會用第二個。
山姆
該對象的所有權方案是通過引用計數系統,在內部跟蹤每個對象有多少業主有實施。當你聲明一個對象的所有權時,你增加它的引用計數,當你完成對象時,你減少它的引用計數。雖然其引用計數大於零,但確保對象存在,但只要計數達到零,操作系統就可以銷燬該對象。
http://rypress.com/tutorials/objective-c/memory-management
但在最新的xcode它提供ARC(自動引用計數)。
所以它會自動管理引用計數。當類釋放釋放它的內容所有對象的內存。
您將有很多內存泄漏。
someDate
是一個poninter變量,並分配了一塊您分配的內存塊,在本例中爲[[NSDate alloc] init]
。
然而,在循環中,您將鼠標指針變量分配到另一個存儲bolck(someDate=[NSDate date]
)
作爲已分配的內存那些塊是未發佈時發生內存泄漏。
那麼它與alloc無關? – willcodejavaforfood 2010-02-18 09:02:19
我認爲他的意思是在名稱中有alloc,new或copy的方法。 – 2010-02-18 09:06:31
大衛..謝謝...這裏有更多的細節。 我的代碼的主要觀點是用循環中的「當前日期」更新「someDate」變量。 – 2010-02-18 09:14:04