2011-07-19 13 views
1

私はこれを正確に理解していません。iPhoneのメモリ管理

私が書く場合:

NSNumber *number = [NSNumber initWithInteger: 5]; 

は、私はそれを解放しなければなりませんか?

NSNumber * number = [NSNumber alloc];これは同じですか。

+4

[に関する重要な(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html%23//apple_ref/doc/uid/10000011-SW1)。あなたがまだ読んでいないなら、あなたは**それを読む必要があります**。 –

答えて

5

+ initWithInteger:に応答しないため、NSNumber *number = [NSNumber initWithInteger: 5];には電話をかけません。あなたは、実際にこのように、+alloc-initWithInteger:の両方を呼び出す必要があります:

NSNumber *number = [[NSNumber alloc] initWithInteger:5]; 

次に、あなたが後でそれを解放する必要があります。あなたが作るすべてのalloc呼び出しに対して、releaseを呼び出す必要があります。


また、あなたは次のクラスのメソッドを使用して自動解放NSNumberを得ることができる。このような

NSNumber *number = [NSNumber numberWithInteger:5]; 

方法はを返すには、あなたが後でそれを自分を解放する必要がないことを意味オブジェクトを、自動解放しました。 するNSNumberクラス:

+0

+1、本当にそのような方法はありません。もう一つの方法は: '[[NSNumber numberWithInteger:5] retain]; ' –

+0

とNSInteger * integer = 5; 私はそれを解放する必要がありますか? – vburojevic

+1

@Wikiboo 'NSInteger'は単なる古い型です(' int'、 'float'、' double'、 'char'に似ています)。それはクラスではありません。 NSNumberのサブクラスでもありません。そして 'NSInteger * integer = 5;'は間違っています:あなたは 'NULL'、' nil'と 'Nil'(アスタリスクを削除しても問題ありません。いいえ、実行時ではなく、コンパイラによって事前に割り当てられているため、POD(普通の古い型)を解放したり解放したりしてはいけません。 –

0

まず第一に、 "+(ID)initWithInteger" という名前のクラスメソッドはありません。 "+(id)numberWithInteger:"

あなたはそれを放つべきではありません。 「[NSNumber numberWith ...」のようなコンストラクタは、という便利なコンストラクタと呼ばれます。自動転送されたオブジェクトを返します。だから、あなたはそれらを解放することについて心配する必要はありません。

+0

"initWithInteger"を慎重に書いています – phi

+0

神!私はそれに気付かなかった。ありがとうございました ;-) – EmptyStack

2

"一般的な経験則は:あなたが割り当て、コピー、または新しい、メモリ管理の場合。

私はこれにもretainを追加したいと思います。