3

まだ可能ですか?つまり、弱いポインターは自動的に null になります。強いポインターは、別の場所を指している場合にのみ割り当てを解除します。

割り当て解除されたオブジェクトを指すというエラーがまだ発生する可能性はありますか?

__unsafe_unretained は、自分が何をしているのかを知っている人によって行われます。だから、それは本当に間違っているわけではありません。

4

2 に答える 2

13

__autoreleasing と @autoreleasepool に注意してください。コンパイラは、autorelease プールを空にするときに __autoreleasing 変数の値を保持できるほど賢くありません。これには、NSError** パラメータを持つメソッド内の @autoreleasepool が含まれます。

__block __autorelease 変数に注意してください。これには、NSError** 変数を設定するブロック オブジェクトが含まれます。一部のブロックベースの API はブロック呼び出しを自動解放プールにラップするため、上記と同じ欠陥が発生します。

事実上安全でない、保持されていない API に注意してください。たとえば、AppKit と UIKit の多くのデリゲート ポインターは安全ではなく保持されず、ゼロ化が弱いわけではありません。オブジェクト グラフを正しく配置しないと、デリゲート オブジェクトの割り当てが解除され、キットがそれを使用しようとしたときにクラッシュします。

オブジェクト ポインターのヒープ割り当て C 配列に注意してください。正しく行うことは可能ですが、注意しないとリークやクラッシュが発生します。

スレッドの競合に注意してください。マルチスレッドのバグがある場合は、すべての賭けが無効になります。

于 2013-05-10T21:53:23.707 に答える
4

__unsafe_unretained、CFTypeRefs、malloc() されたメモリ

于 2013-05-10T02:26:24.723 に答える