我完全不明白這一點。iPhone內存管理
如果我寫:
NSNumber *number = [NSNumber initWithInteger: 5];
我必須將它釋放?這是相同的: NSNumber * number = [NSNumber alloc];
?
我完全不明白這一點。iPhone內存管理
如果我寫:
NSNumber *number = [NSNumber initWithInteger: 5];
我必須將它釋放?這是相同的: NSNumber * number = [NSNumber alloc];
?
您不會撥打NSNumber *number = [NSNumber initWithInteger: 5];
,因爲NSNumber
不響應+ initWithInteger:
。實際上,你需要通話雙方+alloc
和-initWithInteger:
,像這樣:
NSNumber *number = [[NSNumber alloc] initWithInteger:5];
然後,你必須在以後釋放;對於你所做的每個分配調用,你也應該打電話來發布。
NSNumber *number = [NSNumber numberWithInteger:5];
方法這樣返回自動釋放對象,這意味着你不需要自己以後釋放它:
或者,你可以使用下面的類方法得到一個自動釋放NSNumber
。
+1,確實沒有這樣的方法。另一種方法是:[[[NSNumber numberWithInteger:5] retain];' – 2011-07-19 12:49:27
,如果我只輸入NSInteger * integer = 5; 我必須發佈嗎? – vburojevic
@Wikiboo'NSInteger'只是一個普通的舊類型(類似於int,float,double和char)。這不是一堂課。它不是'NSNumber'的子類。而'NSInteger * integer = 5;'是錯誤的:你給一個指針指定一個常量,除了'NULL','nil'和'Nil'外,你永遠不應該這樣做(刪除星號並且你很好)。不,你不應該釋放也不能釋放POD(普通的舊類型),因爲它們是由編譯器預先分配的,而不是在運行時分配的。 – 2011-07-19 12:50:11
首先,沒有一個名爲 「+(ID)initWithInteger:」 類方法的NSNumber類。這應該是「+(id)numberWithInteger:」
你不應該釋放它。 「[NSNumber numberWith ...」等構造函數被稱爲方便的構造函數。他們返回自動釋放對象。所以,你不必擔心釋放它們。
小心,他正在寫「initWithInteger」 – phi
上帝!我沒有注意到它。謝謝 ;-) – EmptyStack
「一般的經驗法則是:如果您分配,複製或新增內存管理功能。」
我會爲此添加保留。
[相關和重要](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html%23//apple_ref/doc/uid/10000011-SW1)。如果你還沒有,你必須**閱讀它。 – 2011-07-19 12:48:42