0

Objective-Cで繰り返し問題が発生しています。私は物事を何度もリリースしているか、十分ではありません。または多分私はそれらを十分に保持していません...

誰かが私に、保持して解放する必要があるときに経験則を与える良い参考資料を教えてもらえますか?

例えば:

一部のオブジェクトは事前に保持されていることをどこかで読んだことを覚えているので、それらを解放する必要がありますが、保持する必要はありません。これらはどのオブジェクトですか?

オブジェクトを割り当て、そのメソッドでのみ必要な場合、それを解放する必要がありますか?それを保持しますか?

もちろん、何かを保持している場合は、それを解放する必要がありますが、それを超えると、少し迷子になります。

4

2 に答える 2

2

唯一の標準的なリファレンスがあります:CocoaまたはiPhone用のAppleのメモリ管理ガイド。

于 2010-07-29T22:30:50.123 に答える
2

ルールは一般的に非常に単純です。次のいずれかの方法でオブジェクトを取得した場合:

id obj = [[MyObject alloc] init];
id obj = [myObject retain];
id obj = [myObject copy];
id obj = [myObject mutableCopy];

次に、ある時点でそれを解放する必要があります-同じ方法、またはdealloc一般的にはあなたの方法で。つまり、、、、へallocの呼び出しと一致する呼び出しのバランスを取ります。retaincopymutableCopyrelease

一部のオブジェクトは事前に保持されていることをどこかで読んだことを覚えているので、それらを解放する必要がありますが、保持する必要はありません。これらはどのオブジェクトですか?

これはめったに起こりません。呼び出されたメソッドのドキュメントには、返されたオブジェクトを解放する責任があることが明記されている必要があります。それ以外の場合は、自動解放されたオブジェクトを受信して​​いると想定する必要があります。

オブジェクトを割り当て、そのメソッドでのみ必要な場合、それを解放する必要がありますか?それを保持しますか?

はい、リリースする必要があります(ただし、保持する必要はありません)。(自動解放されたオブジェクトをそのメソッドでのみ使用する場合は、そのオブジェクトを返す便利なメソッドの1つを使用することもできます。)

于 2010-07-29T21:23:14.873 に答える