問題タブ [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 投票する
2 に答える
3550 参照

iphone - 自動解放プールクラッシュアプ​​リ

自動リリースプールがアプリをランダムにクラッシュさせていますが、この問題の一般的な原因は何ですか?

これは、オブジェクトが過剰に解放されているためです。自動解放プールがオブジェクトを解放しようとする前に、オブジェクトが解放されていると考えるのは正しいですか。したがって、自動解放プールはオブジェクトを過剰解放しようとしますか?

0 投票する
1 に答える
1495 参照

cocoa - NSOperation 内でオブジェクトを自動解放しても安全ですか?

NSOperationQueue で NSInvocationOperation タイプの操作を実行していますが、オブジェクトを自動解放しても安全かどうか疑問に思っていました。つまり、操作ごとに開始されたスレッドに独自の自動解放プールがあることが保証されている場合です。

操作用の自動解放プールに関するドキュメントは見つかりませんでした。実際、Apple のドキュメントを読むと、独自の自動解放プールを定義する必要があることがわかります。

ただし、1) インストルメントにリークは見られません。少なくとも、操作で独自の自動解放プールを割り当てた場合よりも多くはありません。

2) デバッガーを見ると、次のスタック トレースが表示されます。

つまり、CFAutoreleasePool があるように見えます。このオブジェクトは、操作が完了したときに、自動解放されたすべてのオブジェクトに対して release を呼び出すと想定しても安全ですか?

0 投票する
0 に答える
383 参照

iphone - プールが配置されていない状態で NSFetchRequest が自動解放されました - リークしているだけです

まず、このウェブサイトとそのメンバーの反応は素晴らしいと言わざるを得ません。最も役に立ちます。ありがとうございました。

次に、作業中の iPhone/iPad アプリのトラブルシューティング中に、次のエラーをトラブルシューティングしています。

NSFetchRequest は、プールが配置されていない状態で自動解放されました - リークしているだけです。

犯人コードは

この方法で見つけた

リリースステートメントが適切に設定されているかどうかはわかりませんが、そもそもエラーが表示されるまではわかりません. 私は目的の c に少し慣れていませんが、コンパイル時にアプリケーションはエラーを示しませんでした (実行時にメッセージが表示されます)。

誰かがこれで私を助けることができれば、それは大歓迎です。

ありがとう

エドワード

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

objective-c - なぜこれがクラッシュしないのですか?

バグを最小限の再現可能なケースに絞り込もうとしているところ、奇妙なことがわかりました。

次のコードを検討してください。

このコードがクラッシュすることを期待しています。代わりに、以下をログに記録します。

ただし、次のように変更するNSLog()と:

その後、クラッシュします。

もう少し情報を編集します:

プールを排水した後:

したがって、明らかに文字列に対してメソッドを呼び出すだけで、クラッシュするのに十分です。その場合、文字列を直接ログに記録してもクラッシュしないのはなぜですか? NSLog()メソッドを呼び出すべきではありません-descriptionか?

2 番目の「 static: 」はどこから来ているのですか? なぜこれがクラッシュしないのですか?


結果:

ケビン・バラードとグラハム・リーの両方が正しい. (私が誤って想定していたように) それが呼び出されてNSLog()ないことを認識した Graham の意見は正しかったし、Kevin は、これがフォーマット文字列のコピーと周り-descriptionの奇妙なスタック関連の問題であることはほぼ間違いなく正しい。va_list

  1. NSLoggingNSString呼び出しません-description。Graham はこれをエレガントに示しました。ロギングを行う Core Foundation のソースをたどると、これが事実であることがわかります。内部で発生したバックトレースは、 => => =>NSLogを呼び出していることを示しています。 (5365 行目) ですべての魔法が実行されます。すべての置換を手動で検索していることがわかります。置換の型が aであり、記述関数が非 nil であり、置換が別の型によってまだ処理されていない場合にのみ、記述コピー関数を呼び出すことになります。説明がコピーされていないことを示したので、NSLogv_CFLogvEx_CFStringCreateWithFormatAndArgumentsAux_CFStringAppendFormatAndArgumentsAux_CFStringAppendFormatAndArgumentsAux()%CFFormatObjectTypeNSStringより早く処理されます (その場合、おそらく未加工のバイト コピーを実行することになるでしょう)。
  2. Kevin が推測しているように、ここでスタック エラーが発生しています。どういうわけか、自動解放された文字列を指していたポインターがのオブジェクトに置き換えられていますNSString。だから、それはクラッシュしません。変。ただし、静的変数の型を などの別のものに変更するとNSArray-descriptionメソッドが呼び出され、プログラムは予想どおりにクラッシュします。

本当にまったく奇妙です。ポイントは、行動の根本原因について最も正確であるケビンに与えられ、グラハムに私の誤った考えを正したことを称賛します. 2つの答えを受け入れることができればいいのに...

0 投票する
0 に答える
266 参照

iphone - autorelease オブジェクトが NSMutableArray に追加されていても割り当てが解除される

以下を使用してオブジェクトを作成します。

次に、それを NSMutableArray に追加します。

私が初期化した場所:

しばらくすると、このオブジェクトは自動解放されます - 私の NSMutableArray に追加されたにもかかわらず、それは間違いなく解放されていません。

この動作がわかりません。NSMutableArray のメンバーである限り、NSMutableArray によって所有されるべきではありませんか?

ps。実際、これが単純な配列の代わりに NSMutableArray を使用する主な理由の 1 つです。NSMutableArray は autorelease オブジェクトで所有権を処理します。

ここでどこが間違っていますか???? どうもありがとう!

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

iphone - 基本的な保持、自動解放に関する質問

質問を保持して自動リリースします。

2 つのコードに違いはありませんか?

で、この二人?保持数についてはまだわかりません。ありがとうございました。

0 投票する
1 に答える
516 参照

objective-c - 自動解放後、セッターのために保持

Google Objective-C Style Guideによると、自動解放してから次のように保持する必要があります。

この場合、foo_ は同じインスタンスに設定されていても解放されず、より防御的なセッターになります。

私の質問は、これが @property と @synthesize の仕組みですか?

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

objective-c - 自動解放されたオブジェクトをNSMutableArrayに追加する

私が行っているメモリ管理の一部が原因で例外をスローするコードを次に示します。

私のヘッダーファイル:

私の実装ファイル:

この文脈で何が起こっているべきですか?createSampleObjectある時点でオブジェクトを自動解放し、そのオブジェクト[holderArray addObject]の参照カウントを1ずつ増やします。私が理解していることから、すべて問題ないはずです。

しかし、ゲッターがその要素にアクセスすると、次の例外が発生します。モデルオブジェクトの作成時に自動解放stmtを削除すると、表示されなくなります-

自動リリースがどのように機能するかについて基本的な何かが欠けていますか?

ありがとう、
テジャ。

編集:実際にはあなたは正しいです、このエラーを投げていた私のコードの完全に無関係な部分があります。autorelease動作中のものから変更したのは、ステートメントを追加することだけだと思いました。

ありがとう!

0 投票する
1 に答える
482 参照

iphone - NSOperationQueue を使用して別のスレッドで自動解放されたオブジェクトを作成する

これは、autorelease、Cocoa スレッド、および NSOperationQueue に関する一般的な質問です。

NSOperationQueue を使用して特定の API 呼び出しを実行し、結果を解析してメイン スレッドに返します。NSOperationQueue は、これらの操作を新しいスレッドで実行します。新しいスレッドが開始されるたびに正しく理解できれば、このスレッドの周りに作成された自動自動解放プールがあり、スレッドが終了すると解放されます。

これが私を悩ませているケースです。割り当てられた NSArray を NSOperationQueue に渡します。操作中に、作成される一連の自動解放されたオブジェクトが配列に取り込まれます。次に、配列がメイン スレッドに返されます。

  1. 自動解放されたオブジェクトはスレッド上で作成されたので、それらは割り当て解除されますか? 私が理解しているように、それらは NSArray に追加された後、ref カウントが 1 であるため、そうすべきではありません。

  2. これらのオブジェクトをリリースするのは誰ですか? autorelease は魔法のように責任をメイン スレッドの autorelease プールに渡しましたか。

  3. NSOperationQueue を使用するのではなく、自分でスレッドを作成した場合、これは何か違うでしょうか?

ありがとうございました!

0 投票する
1 に答える
656 参照

actionscript-3 - AS3 ムービークリップが一貫して再生されない

したがって、SWF がロードされる最初に、次のような一連のアニメーション クリップもロードされます。

そして私のclipLoaded機能は次のとおりです。

ロードされている clip4 ファイルにはstop()、最初のフレームに があります。ゲームの後半 (clip4 は「outro」) で使用するもの:

ただし、クリップは約 25% の時間しか再生されないようで、まったく同じ方法でロードした他のすべてのクリップは正常に再生されます。唯一の違いは、これらのクリップはロード後すぐに再生されるためclip4、ある時点で自動解放されていると思われることですが、私にはまったくわかりません。