私はlearnig objective-cとiPadアプリをプログラミング中です。私が自分自身を踏み台にして再読しなければならないことの1つは、メモリ管理です。私はそこに行っている...ゆっくりと。すべてのalloc
/retain
のような基本ルールは、release
が有益である必要があります。しかし、これは比較的単純コーディングされており、[myArray release]
文が必要になりiosでのメモリ管理の理解
NSArray *myArray = [[NSArray alloc] init];
myArray = [someNSSet allObjects];
...
は、次のコードを取る... 1つの比較的基本的な事は私を見逃さと誰かが説明できるのだろうか。
しかし、私は(の例を見ておくと、確かに、私はあなたが(NSString *)
を使用するときに限り、私は理解して、あなたが必要いけないどのように、...広く
NSArray *myArray = (NSArray *)[someNSSet allObjects];
を以下の「ショートカット」を使用していました[myArray release]
ステートメントを使用しますが、私は理由を理解しない。
可能誰かが説明してもらえますか?
私は戻り値を所有していません。誰が/何ですか? –
@BenThompson:オブジェクト(newまたはalloc、copyまたはmutableCopy)を作成すると、保持カウントは1になり、所有しています。 メッセージを保持するオブジェクトを送信すると、保持カウントは1だけインクリメントされ、所有者もそれを所有します。自分が所有するオブジェクトを解放するだけです。 –
@Ben:自動解放プールは、 'allObjects'から返されたオブジェクトの所有者である可能性が最も高いです。もう1つの可能性はsetオブジェクトですが、実際には、新しい配列を作成するのではなく、すでに所有しているオブジェクトを単に公開している場合にのみ発生します。しかし、バックグラウンドで何が起こっているのかを理解することを除いて、あなたは誰が物事を所有しているのか心配するべきではありません。あなたがそうしていてもしていなくても、それだけで十分です。 –