問題タブ [autorelease]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
981 参照

cocoa - ココアのコンビニエンス メソッドから返されたオブジェクトの処理

NSDate オブジェクトの割り当てが時期尚早に解除されるという問題がたくさんあります。問題は、NSDate コンビニエンス メソッドから返されたオブジェクトを処理する方法に関連している可能性があると思われます。JKShow クラスの showDate プロパティ宣言は「保持」する必要があると思いますが、割り当てまたはコピーに変更しても問題には影響しないようです

アップデート

問題は、ここにコピーされたコードにはありませんでした。私の方法では、便利な方法JKShow initから返された日付を保持していませんでした。NSDate助けてくれてありがとう、みんな。

0 投票する
6 に答える
9896 参照

iphone - iPhone の自動解放

iPhone アプリケーションの開発が終わりに近づき、iPhone 用に開発するときに autorelease を使用することがどれほど悪いことなのか疑問に思っています。かなりランダムなクラッシュに直面していますが、これまでのところ、ずさんなメモリ使用量以外の原因を突き止めることはできません。

Cocoa の初心者として、iPhone の手動保持/解放を支持して自動解放を避けることを強く提案したガイドライン文書を最初に読んだことを覚えています。しかし、より「上級」の Cocoa 開発者が早い段階で参加し (皮肉なことに、その後解雇されました)、あちこちで autorelease を使用していました。確かに、私は「モンキー・シー・モンキー・ドゥ」モードに陥り、それが戻ってきて私を悩ませているようです (現在、私はプロジェクトの唯一の開発者です)。

次に何をすべきか?コードを分岐し、可能な場合は自動解放コードを調べて置換する必要があるように思えますが、うっかりしてアプリを壊さないように注意してください。多くのライブラリ呼び出しの結果、stringWithFormat のような自動解放されたオブジェクトが生成され、alloc を使用していないほとんどすべてのオブジェクトが生成されるようです。私が注目すべき他の落とし穴や提案はありますか?ココアの達人に感謝します。

0 投票する
5 に答える
4510 参照

cocoa-touch - 自動リリースによって実際にCocoaTouchがリリースされるのはいつですか?

autoreleaseiOSでは注意が必要だと思います。呼び出し元が必要とするオブジェクトを返すメソッドがあるallocので、この状況では、私が理解しているようautoreleaseに、オブジェクトが戻る前に、呼び出し先のオブジェクトに送信する必要があります。

これは問題ありませんが、コントロールが電話に戻ると(つまり、ボタンのクリックが処理された後)、自動解放プールが解放されたように見えます。これが想定されていることだと思いますが、この状況のベストプラクティスは何でしょうか。

オブジェクトが解放されないように呼び出し元からメッセージを送信してretainから、で明示的に解放することにしましたdealloc

これが最善のアプローチですか?

0 投票する
4 に答える
955 参照

iphone - 自動解放プール内のオブジェクトはどのように参照されますか?

自動解放プールが保持するオブジェクトへの強い参照または弱い参照を保持するかどうか疑問に思っています。彼らは弱いと思います。自動解放プールにオブジェクトを追加すると、すぐには解放されず、プールが空になったときに解放されますよね? つまり、参照カウント (または保持カウント) は、オブジェクトを自動解放プールに追加するときに同じままになりますか?

0 投票する
3 に答える
11296 参照

iphone - 自動リリースプールに-releaseまたは-drainを送信することの違いは何ですか?

多くの本や多くのサイトで、私は-drainを見ています。さて、クールに聞こえる自動リリースプールの場合。しかし、それはリリース以外のことをしますか?-drainは、プール自体を解放せずに、プールにすべてのオブジェクトを解放させるだけだと思います。ただの推測。

0 投票する
2 に答える
1773 参照

iphone - main.m は本当に、メインの実行ループの自動解放プールがすべてのイベントによって作成される場所ですか?

その場合、すべてのイベントで main() 関数を呼び出す必要がありますよね? しかし、試してみたところ、アプリの起動時に「新しいイベント...」というログメッセージが表示されます。したがって、メインスレッドには別の自動解放プールが必要だと思います。

0 投票する
3 に答える
2845 参照

iphone - iPhone OS で自動解放プールをドレインまたは解放する必要がありますか?

ドキュメントは次のように述べています。

ガベージ コレクション環境では、ドレイン メッセージをプールに送信すると、必要に応じてガベージ コレクションがトリガーされます。ただし、リリースはノーオペレーションです。参照カウント環境では、drain は release と同じ効果があります。したがって、通常は release ではなく、drain を使用する必要があります。

私がそれを正しく理解すれば、ガベージ コレクションや参照カウントが存在するかどうかに関係なく、常に -drain を使用する必要があると彼らは言います。iPhone では GC がないので、とにかく -drain? を送信します。

残念ながら、このドキュメントは Cocoa についてのみ言及しており、Cocoa Touch や iPhone については言及していません。したがって、同じことが当てはまるかどうかはわかりません。

0 投票する
3 に答える
417 参照

iphone - 特定の自動解放プールにオブジェクトを追加することは可能ですか?

ドキュメントには、NSAutoreleasePoolのaddObject:メソッドがあります。

私はこれについて考えました:

NSString * myString = [[NSString alloc] initWithCString: "これは機能しますか?"]; [thePool addObject:myString]; [anotherPool addObject:myString];

それは可能ですか?自動解放プールスタックの一番上のオブジェクトにのみオブジェクトを追加できることを常に読んでいます。

0 投票する
2 に答える
378 参照

objective-c - コンビニエンス コンストラクターまたはオブジェクト ファクトリがオブジェクトの解放を気にする必要があるのはなぜですか?

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

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

0 投票する
2 に答える
4914 参照

iphone - performSelectorInBackground: を実行すると自動解放プールがないのはなぜですか?

バックグラウンド スレッドに入るメソッドを呼び出しています。

次に、セレクターによって呼び出されるこのメソッドの実装があります。

そのスレッド用にそこに自動解放プールを作成しますが、常に次のエラーが発生します。

自動解放プールを削除すると、このようなメッセージが大量に表示されます。また、performSelectorInBackground: の呼び出しの周りに自動解放プールを作成しようとしましたが、それは役に立ちません。

パラメーターが疑わしいのですが、コンパイラーが NSCFNumber について文句を言う理由がわかりません。何か不足していますか?

私のインスタンス変数はすべて「非アトミック」です。それは問題になる可能性がありますか?

更新: メイン スレッドの自動解放プール (おそらく ivar) にいくつかの変数が追加されているのではないかと疑うかもしれませんが、間違った自動解放プール内でその変数を解放しようとしていますか? もしそうなら、どうすればそれを修正できますか?(くそー、このスレッド化は複雑です;))