問題タブ [nszombie]
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.
objective-c - iOSlibsystem_c.dylibstrdupメモリリークNSZombieが機能しない
iOSのメモリリークを追跡するのを手伝ってください。ありがとう!
xCode 4.0.1を使用していて、メモリリークを追跡するためにNSZombieをアクティブ化しようとしましたが、xCode3.xでは以前のように機能しないようです。
Instrumentsがこれを指摘しているように、メモリリークがどこから来ているのかわかりません。
リークされたオブジェクト-> GeneralBlock-32 アドレス-> 0x4c8600 サイズ-> 32バイトの 責任あるライブラリ-> libsystem_c.dylib 責任のあるフレーム/呼び出し元-> strup
この時点では、NSZombieでInstrumentsをxCode 4で正しい方法で使用しているかどうかはわかりません。詳細については、左側のオプションLeaksの下にある[i]をクリックしてもNSZombieオプションが表示されないためです。
観察:私のiPhoneアプリケーションは、ライブストリームmms/wmaとwmaáudioファイルを有限の時間で再生します。リークは有限のwmaファイルでのみ発生しますが、ストリーミングされたソースから再生しているときは完全に実行され、終了時間はありません。
objective-c - ブロックでキャプチャされたオブジェクトのオーバーリリースの問題。カウントを保持すると、+2 から 0 にまっすぐジャンプします。
Zombies インストゥルメントによると、一部のディクショナリ値の過剰リリースが原因で、時折発生するクラッシュに混乱しています。Instruments でこれらのオーバーリリースされたオブジェクトの 1 つのオブジェクト履歴を見ると、その保持カウントが 1 つの段階で +2 から 0 に直接低下していることがわかります。(投稿の最後にあるスクリーンショットを見てください)。これがどのように可能であるかは私には明らかではありません。
このクラッシュは、Instruments でプロファイリングしているときにしか見られないため、Apple のバグであると考えられますが、Instruments が明らかにしているだけのパイロット エラーであると想定する方がおそらく安全です。
とにかく、いくつかの Core Foundation オブジェクト (CFStrings および CFNumbers) を含む CFDictionary を構築しています。次に、これを NSDictionary* にキャストして、Objective-C メソッドに渡します。私のコードの簡略版は以下のとおりです。
と はObjective-C オブジェクトと見なされるため、呼び出しによってブロックがコピーされるとキャプチャされて自動的に保持str1
され、そのブロックが解放されると解放されると考えていました。実際、これらの変数はブロックによってキャプチャおよび保持されているようです。しかし、Instruments でオーバーリリースされた CFString のオブジェクト履歴を調べると、ブロックがコピーされると参照カウントが増加していることがわかります。困ったことに、ブロックが解放されると保持カウントが +2 から直接 0 に低下します (記事の最後にあるスクリーンショットを参照)。スタック トレースから、これがどのブロックかを判断する方法がわかりません。ブロック内の辞書で呼び出されるまでにstr2
num1
-receiveDictionary:
dispatch_async
CFRelease
doStuff()
、その値の一部は既に割り当てが解除されており、プログラムがクラッシュします。
では、追加のリリース コールはどこから来たのでしょうか。Instruments が示すように、オブジェクトの保持カウントが +2 から 0 に直接低下するのはなぜでしょうか?
気まぐれで、次のように、2 番目のブロックに辞書全体を強制的に保持させました。
これにより、クラッシュが消えたようです。少なくとも、インストゥルメントはゾンビの報告を停止します。ただし、これが機能する理由は一生わかりません。確かに、ブロックが辞書全体ではなく、関心のある辞書の値を保持していることを確認するだけです。どうしたの?
Instruments は、オブジェクトの保持カウントとともに、ゾンビ CFString の次のオブジェクト履歴を一覧表示します。興味深いイベントのスクリーンショットを含めました。
#0 +1 CFString を作成
#1 +2 CFString をディクショナリに追加
#2 +1 CFString を解放
#3 +2のブロックを-receiveDictionary:
コピー
しても CFString を保持
#4 +0なに…?オブジェクトのリテイン カウントが +2 から 0 に急降下しました!
#5 -1 CFDictionary が解放され、クラッシュする
ios - iOS の NSZombie がシミュレーターにない
Autorelease 関数でクラッシュするバグがあります。クラシック: オーバーリリース後にオブジェクトにアクセスします。
問題は、iOS プログラムが EAAccessory を使用しており、デバイスからデータを受信した結果としてどこかで発生していることです。
その結果、問題はシミュレータから診断する必要があります。NSZombie のメモリ要件により、NSZombie はシミュレーター以外の iOS では無効になっています。
シミュレータの外の iOS の世界で NSZombie を使用すると簡単にリリースされすぎたバグを追跡するためのヒントやアイデアはありますか?
シミュレーター用の EAAcessory の動作をスタブ化することは既に考えています。しかし、時間の制約により、必要な作業量のために「次のリファクタリング/機能強化」が必要になります。
今は、アクセス不良のバグを見つける必要があります。
objective-c - Objective C:どこにあるかgdbで?
NSZombieを使用してプログラムをデバッグしようとしています。デバッガーは問題のあるインスタンスのアドレスを返しましたが、コマンド'shellmalloc_historyを実行するために必要なpidをどこで取得するかわかりません
この場合に使用する正しいpidは何ですか?3298と3298:707を試しましたが、どちらも機能しませんでした。ここで助けに感謝します。
ジェンホー
iphone - NSManagedObjectのリリース
私はアプリの一部をAppleのCoreDataRecipesサンプルコードに基づいています。
http://developer.apple.com/library/ios/#samplecode/iPhoneCoreDataRecipes/Introduction/Intro.html
いくつかの変更を加えた後、私は導入したはずのバグを追跡するのにかなりの時間を費やしましたが、アップルのコードに存在する2行のコードを削除することで解決しました。
NSManagedDataObjectレシピに作成者属性を追加しました。これは、私が知る限り、レシピがすでに持っている他の文字列属性と実装が同じです。IngredientDetailViewControllerによって制御されるモーダルビューに出入りした後、私の新しい属性はゾンビになりました。IngredientDetailViewControllerのdeallocメソッドは
バグを突き止めた後、レシピと材料(別のNSManagedObject)のリリースをコメントアウトしたところ、アプリが機能しているように見えました。私のコードは、これらのリリース呼び出しの有無にかかわらず機能することを発見しました。バグは私が行った別の変更によって修正されたに違いありません。私は今疑問に思っています
- アップルのサンプルコードが元々このように書かれたのはなぜですか?
- NSManagedObjectレシピの元の属性についてはどうでしたか?つまり、dealloc呼び出しからのゾンビ化の影響を受けませんでしたか?
上記が私の無知を十分に示していない場合、私はObjective CとiPhoneの開発に不慣れであることを指摘する必要がありますが、ここで何が起こっているのかを本当に理解したいと思います。
コメントに応じて編集および更新:
これらの行のコメントを外してゾンビの作成を複製することはできません。明らかに、バグシューティング中の別の変更でうまくいきました。私が最初に尋ねたもののいくつかは現在無効ですが、機能がこれらの呼び出しの有無にかかわらず同じように見えるため、NSManagedObjectsのリリースの使用に関してさらに混乱しました。今の私の主な質問は、彼らがそこにいるべきかどうかということです。IngredientDetailViewに保存すると、クラッシュが発生していました。ヘッダーは次のとおりです。
およびsaveメソッド:
私は新しいユーザーなので、ここにデータモデルのスクリーンショットを置くことはできません。そのため、ここにリンクがあります。データモデルのスクリーンショット
そして最後にレシピヘッダー:
再度、感謝します。
objective-c - Objective C: オブジェクトが NSZombie かどうかを今すぐ判断する方法
設定しましNSZombieEnabled=YES
た。次のコードを実行したい
udid
が「リリース」されたとき、それはゾンビに置き換えられたことが判明しましたが、そうではありませんnil
。だから私は何かをしたい
を試し[udid isKindOf:[NSZombie Class]]
ましたが、NSZombie
存在しません。udid
では、オブジェクトがゾンビであるとどのように判断できますか?
objective-c - オブジェクトは解放されていませんが、EXC_BAD_ACCESS?
コードに次の問題があります。
これらの4つのViewControllerはすべて、.hファイルで適切に定義されており、手動で合成されます(はい、すべてまったく同じです。再確認しました)。
}
ここで、何か奇妙なことが起こります。case 0:
が呼び出されると、にcontroller
なりself.kundenTableViewController
ます。次にEXC_BAD_ACCESS
、最後の行で、ViewControllerがスタックにプッシュされます。これは、この特定のコントローラーでのみ発生し、他のコントローラーでは発生しません。NSZombiesを試し、NSLogを介してコントローラーが正しく初期化されているかどうかを確認しましたが、すべて問題ないようです。何か案は?
更新:4つのコントローラーのコードは次のとおりです。
}
}
}
}
なぜそれが最初のものだけで起こるのか理解できません。
objective-c - ディストリビューション プロビジョニング プロファイルを追加した後、NSZombie が機能しなくなった
プロジェクトをデバッグするために NSZombie を使用していましたが、プロファイラーを実行しても何も表示されません。これに影響すると思われる唯一の変更は、ad-hc プロビジョニング プロファイルの追加です。
プロファイル スキームが [実行アクションのオプションを使用する] に設定されているため、NSZombie 環境変数は実行スキームに対して引き続き有効であり、プロファイル スキームにもそれが表示されます。
しかし、XCode 4 で Allocations Profile Instrument を選択すると、NSZombie の動作に関するレポートが提供されません。私はこれらの行を追加することさえ検討しました:
これにより NSZombie が作成されるはずですが、以前のような Instruments レポートはありません。
誰にもアイデアはありますか?
ios - LionのInstrumentsofXcode 4.1でNSZombieを有効にするにはどうすればよいですか?
これは、特にLionで実行されている新しいXcode4.1に関するものです。InstrumentsでNSZombieを有効にするにはどうすればよいですか?Xcode 4.0のように、Launch Configurationの下の(i)アイコンのAllocationsにはもうありません。ゾンビと呼ばれるライブラリエントリもありません。
もちろん、問題は、Lionでの実行を拒否するため、Xcode 4.0にフォールバックできないことです。そのため、私はピクルスになっています。私よりも経験豊富なLionを使用している他の最先端の開発者は、これを掘り下げるのを手伝うことができますか?ありがとう。-リック
iphone - ASIHTTPRequest とゾンビ...
解決済み(私は思う): VC が (dealloc で) ポップされた後、ASIHTTPRequest デリゲート/NSOperationQueue デリゲートを nil に設定します。
始める前に、この質問は似ていますが同じではありません。
私のアプリはリリース間近ですが、これは開発中に存在した唯一の永続的なバグです。誰かにアプリをデモするときに発生した唯一のバグでもあり、このバグが原因でアプリが終了するため、非常に恥ずかしいです。誰かがこれに対する修正を (完全に) 見つけることができれば、私はまともなサイズの報奨金を授与します.
質問の開始:
基本的に、このバグは、ASIHTTPRequestrequestFinished
がゾンビであるオブジェクトに対してセレクターを呼び出そうとしたときに発生します。
周囲を見渡すと、ASIHTTPRequest は、セレクターをゾンビに送信する場合に、ゾンビではない同様のオブジェクトに送信するように見えます。送信先のコントローラーの CALayer にセレクターを送信することは非常に一般的だと聞きましたが、私の UINavigationButton にも送信されます!? - とにかく、これの効果は例外をスローすることです。
「requestFinished」セレクターを呼び出そうとすると、ASIHTTPRequest クラス内で問題が発生します。
そのコード行は失敗したものです - 私を困惑させるのはなぜですか? [self retain]
私がリンクした質問について、OPはビューコントローラーから呼び出すことで修正したと言いました。きっとそうじゃない?
構造
私の ASIHTTPRequest が機能する方法は、アプリケーション デリゲート内に存在する downloadQueue (NSOperationQueue) に追加されることです。私のアプリの構造/スタイルは、主にこのサンプル コードに基づいています。このサンプル コードは、非常によく似た処理を行いますが、flickr RSS フィードを使用します。
ASIHTTPRequest を使用する私のアプリのセクションは、Web カメラ ビューアーです。3 つの Web カメラを表示するテーブル ビューを備えたナビゲーション コントローラーがあります。これらの画像は JPEG で、30 秒ごとに静的ファイル (リモート サーバー上) に更新されます。このテーブル ビュー内のセルはカスタムであり、それぞれが独自の ASIHTTPRequest をロードします。セルはそれぞれの画像をダウンロードして表示します。
これが私が作成したメソッドで、各セルで呼び出されます。
これらのセルの 1 つを選択すると、ユーザーは詳細ビューに移動し、そこで ASIHTTPRequest の別のインスタンスが読み込まれ、選択した Web カメラの画像がダウンロードされます。
バグの発生方法
私のアプリの通常の「穏やかな」使用法では、正常に動作します。この問題は、これらのビュー間 (ルート Web カメラ ビューと詳細 Web カメラ ビューの間) で急速なプッシュとポップが発生した場合に発生します。詳細ビューに入り、進行状況バーが動き始め、ルートに再びポップすると、最も頻繁に発生します。これにより、コントローラーがアクティブではないため、ASIHTTPRequest が終了し、コントローラーを呼び出そうとすると失敗することがわかりました。
クラッシュログ
- ここまで読んでくれてありがとう!
- 答えてくれたらもっとありがとう
- あなたが私の問題を解決すれば報奨金:)