2011-03-22 85 views
1

考慮這行代碼,數據是一個方法的參數:快速Objective-C的問題

myVar = [[NSMutableData data] retain]; 

我不能完全肯定這是怎麼回事,但我認爲這是分配myVar的中包含的數據數據,增加它的引用計數。有人可以證實或否認這一點?謝謝!的原代碼

來源snippet-見清單1:Apple Dev Article

回答

2

[NSMutableData data]將返回一個自動釋放的對象(便捷方法)。

因此,噹噹前運行循環的自動釋放池被耗盡時它會自動釋放。

你保留它來防止這種...

那你確定你有一個有效的指向對象。 這是正確的,只是不要忘了釋放它,當你不需要它了......

編輯

例如:

[ [ [ [ [ [ NSData data ] retain ] release ] autorelease ] retain ]; 

保留計數爲2時,自動釋放一個對象不會改變保留計數... 但是該對象在當前的自動釋放池中放置了兩次,所以它將在下一次放出時釋放兩次...

+0

謝謝,剩下的一個問題:NSMutableData之後的單詞數據的意義是什麼? – 2011-03-22 01:11:16

+0

這是類方法的名稱:+(NSData)數據。在其他語言中也稱爲靜態方法。 – Macmade 2011-03-22 01:13:39

+0

@Macmade:實際上,Objective-C *中的類方法並不類似於靜態方法。 – jlehr 2011-03-22 03:08:12

2

您正在使用NSMutableData的新實例的便捷方法,然後將其保留你的初始化變量myVar的。

它與myVar = [[NSMutableData alloc] init];基本相同,因爲您仍然保留它。

+0

小心的,變量的初始化和變量賦值在C中是兩個不同的東西(在擴展中,在Objective-C中)。 – dreamlax 2011-03-22 01:05:15

+0

不夠公平,所以說這個的正確方法是上面的代碼將一個新的NSMutableData實例分配給myVar? – Rog 2011-03-22 01:10:12

+0

是的,這是更多的「通過書」的方式來說。我不認爲這可能會讓任何人感到困惑,但我只是一個有點兒童的人。 – dreamlax 2011-03-22 23:57:38

1

在上面,「data」是一個返回類NSMutableData的新對象的類方法。由於「數據」不是隱含其返回對象所有權的方法之一,因此調用該對象的「保留」方法來建立所有權。現在,調用者負責在完成對象時放棄其所有權聲明。