0

実際、名前に「new」、「create」、「alloc」、または「copy」を含むメソッドを使用する場合、返されたオブジェクトを解放する責任があります。BUT: なぜこれらのメソッドは -autorelease を呼び出すのでしょうか? これにより、オブジェクトが「過剰に解放」されることはありませんか?

そのようなメソッドからそのオブジェクトを取得し、それに対して -release を呼び出すとしましょう。オブジェクトは自動解放プールにあり、参照カウントは 0 です。次に、自動解放プールが解放されるとどうなりますか?

4

2 に答える 2

5

便利なコンストラクターの名前にはこれらの単語が含まれていないため ([NSMutableArray array] など)、慣例により、自動解放されたオブジェクトを返します。保持されたオブジェクトを返すことを示す単語の 1 つを含むメソッドは autorelease を呼び出さないため、質問の前提の一部が正しくありません。

コンビニエンス コンストラクターから返されたオブジェクトを (明示的に保持せずに) 自分で解放すると、過剰に解放され、アプリケーションがクラッシュする可能性があります。

于 2009-05-01T13:23:46.717 に答える
0

ごめんなさい @all! 明るい太陽の下で長時間座っていたと思います。もちろん、これらの便利なメソッドは、最初のある時点で -alloc を呼び出すため、作成したオブジェクトの所有権を持っています。また、-alloc メソッド自体は、既に -alloc であるため、-alloc を呼び出しません。それでおしまい。

質問を削除することを考えましたが、他の誰かが私のように太陽の下で長時間座っていたのかもしれません. したがって、これが役立つ場合があります。

于 2009-05-01T13:26:15.557 に答える