不使用ARC OR自動垃圾收集內存管理
-(Fraction*) add: (Fraction*) f
{
Fraction *result = [[Fraction alloc] init];
//To do
return result;
}
//after the function returns. What will the reference count
of object that result was pointing to. See main.m below.
IN的main.m
int main(int argc, char* argv[])
{
//To do
Fraction *ans = [[Fraction alloc] init];
ans = [f1 add: f2];
//I guess that the refrence count of the object that ans will be pointing
after this statement will be 1 or 2.
//...
}
//從斯蒂芬科昌目標c關於此的提取物
使用手動內存管理時,此方法存在問題。在計算完成後,結果對象被分配並從方法返回。因爲該方法必須返回該對象,所以它不能釋放它 - 這會導致它立即被銷燬。解決此問題的最佳方法可能是自動釋放對象,以便可以返回其值,同時釋放該對象直到自動釋放池被耗盡。你可以採取的事實,即自動釋放方法返回其接收器並將其嵌入表達這樣的優勢:
Fraction *result = [[[Fraction alloc] init] autorelease];
//or like this:
return [result autorelease];
注:根據提取似乎refrence計數爲2。如果它是這樣,請解釋一下爲什麼?
目標C中的內存管理有很多很多類似的問題。請參見[Objective-C中的內存管理](http://stackoverflow.com/questions/2020103/memory-management- in-objective-c)爲例。 –