在Objective C中,我如何顯式釋放由另一個對象擁有的對象?或者也許等價地告知擁有的對象它不再擁有子對象。考慮以下幾點:如何釋放目標C中其他對象擁有的對象C
- (void) testWithNSString:(NSString *)val
{
NSData *data = [val dataUsingEncoding:NSASCIIStringEncoding];
// ...
// now I want to explicitly release data e.g. due to low memory
}
在[val dataUsingEncoding:NSASCIIStringEncoding]
一個NSData
對象返回,我以爲(由於所有權的一般慣例),它會被釋放,當val
被釋放。從不泄漏的角度來看這似乎是可以接受的。但是這個策略引發了兩個問題:
- 如果我想立即明確釋放
data
對象,由於內存不足? - 如果我不想讓
testWithNSString
的調用者留下NSString val
對象(在testWithNSString
已返回之後),它突然擁有新對象的所有權?
只要你不分配內存,你不必擔心,因爲操作系統會照顧它。遇到內存不足時,無論如何都會釋放這些參數。當你從這個方法返回時,所有的局部變量將被釋放。 – iDev
@ACB我不這麼認爲。 'dataUsingEncoding:'返回一個自動發佈的'NSData'。它將在運行循環結束時釋放,而不是從方法返回時釋放。 – DrummerB
@DrummerB,Yup。我沒有直接提到它。我的觀點是,他不必擔心永遠留在記憶中。 autorelease的實際工作是你所提到的。 – iDev