2010-04-17 71 views
0

我對Cocoa仍然很陌生,對內存管理知之甚少。我閱讀了Apple的文檔,但我仍然感到困惑。我的問題是,如果我在dowhatever結束時將變量的值設置爲- (void)dowhatever,變量的內容是否會被刪除?如果是的話,是否有一種方法(無需寫入文件)可以用來保留變量內容?保留可可中的信息?

感謝所有幫助

回答

2

我的問題是,如果我在一個- (void)dowhatever設置一個變量的值時,虛空結束,...

void是一種類型。它沒有開始也沒有結束。

具體來說,它是dowhatever方法的返回類型。如果dowhatever返回一個值,那麼返回值的類型將是您擁有void;它會說,例如,- (NSUInteger) doWhatever。有void意味着該方法不返回一個值。

另請參閱Objective-C 2.0 Programming Language文檔。

...變量的內容是否會被刪除?

如果它是一個局部變量,那麼該方法返回時該變量將不再存在。

只要變量存在的實例(對象)存在,實例變量就存在 - 也就是說,直到實例被解除分配爲止。

實例變量也包含在Objective-C文檔中。

如果是這樣,有一種方法(不寫入文件),我可以用來保留變量的內容?

如果您只需將對象返回給調用者,請保留它並自動釋放它。有關更多信息,請參閱Memory Management Programming Guide for Cocoa

如果這不是你正在做的事情,那麼問題就變成爲什麼你需要對象保持活着。

根據對象思考:對象可能擁有某些其他對象,並且對於它擁有的每個對象都有一個實例變量*。只要你擁有自己的所有權,並以代碼維護它們,對象的生命週期就可以工作。

如果對象A需要另一個對象B,那麼A應該擁有B.這個所有權不是唯一的;它可以共同擁有B.但它至少需要共同擁有B;只要有至少一個所有者,B就會一直活着。

這也在內存管理指南中介紹過。對於對象之間關係的其他示例,您應該翻閱Cocoa Fundamentals Guide,特別是Cocoa's design patterns的章節,並且您可能需要查看sample code以查看實踐中演示的模式。

*它也可以具有它不屬於的對象的實例變量,例如委託。你可以擁有一個你不擁有的對象的實例變量,但如果你擁有它,你應該有一個實例變量。