問題タブ [dealloc]
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.
iphone - iPhone - メモリ管理に関する質問ですか?
アプリのデリゲートにナビゲーション コントローラーがあるとします。appDelegate の dealloc メソッドでリリースする必要があるのはなぜですか? appDelegate の dealloc メソッドが呼び出されると、ユーザーがアプリを終了していることを意味するため、リークはアプリケーションに影響しません。
では、なぜ appDelegate の dealloc メソッドで何かを解放するのでしょうか?
iphone - NSTimerが停止しない
変数を持つクラスがありNSTimer *myTimer;ます。ある時点で私はします:
さらに、私は方法があります:
そして、クラスが次の方法で解放されたら、タイマーを停止します。
さて、問題は、クラスを解放すると、とにかくイベントが発生し続けるということです。私は何か間違ったことをしていますか?deallocメソッドが呼び出されることはないようです。そうしないと、myTimerはnilになり、セレクターが起動されても、if(myTimer)
ipad - iOS AVAudioPlayer 複数のインスタンス、一度に複数のサウンド
「読み聞かせ」オプションを備えた iPad 用のインタラクティブな子供向けの本に取り組んでいます。
各ページ (インデックスがある) には、「read to me」機能を生成するオーディオ クリップがあります。この機能はうまく機能しますが、ページをめくると、新しいオーディオが開始されても、前のページのオーディオがまだ再生されるという事実を除いて、これが私の例です:
たとえば、ページ 2 の音声の再生が停止する前にページ 3 に移動すると、両方のクリップが重ねて再生されます。
新しいファイルを割り当てる前に [rtmAudio stop] を配置しようとしましたが、うまくいかないようです。新しいクリップを開始する前に、前のオーディオ クリップを削除する方法が必要です。
objective-c - 自殺:Objective-Cオブジェクトが独自の-deallocメソッドを呼び出す
Objective-Cのオブジェクトが自殺するのは良い習慣ですか?つまり、オブジェクトが[self dealloc]どこで-dealloc許可されているかを宣言するために、通常どおり整然と終了しますか?主なリスクは何ですか?
たまたま、特定の例があります。NSObjectを拡張し、NSTimerインスタンスとタイマーの起動回数を制限するように設定されたNSUIntegerで構成されるカスタムタイマーオブジェクトです。時間切れになると、オブジェクトはタイマーにそのメソッド-invalidateを呼び出すことで自殺を指示し、自殺します。-deallocこれは自動的に行われるため、オブジェクトを追跡したり、オブジェクトの割り当てを解除する正しいタイミングを決定的に知る必要はありません。
より詳細な説明については、こちらの私の投稿を参照してください。
uitableview - UIViewのすべてのトレースを削除する
別の質問があります。MainViewControllerというデリゲートを持つNavigationControllerがあります。このナビゲーションコントローラーには、同じデリゲートを持つテーブルビューMainViewControllerがあります。テーブルの行を押すたびに、itemViewControllerというビューがポップアップ表示されます。
さて、これはすべて本当にうまくいきます。しかし、押し戻すと、itemViewController +そのビューを完全に忘れて、100%破棄する必要があります。それが存在すらしなかったように。
これには論理的な背景があります。ビューを終了するたびに、押し返します。また、もう一度表示したい場合は、再読み込みしたいのですが、表示されるデータは常に変化しているため、ビューへの古い参照を使用したくありません。そのため、現在の私の状況では、ビューに新しいデータを表示するには、アプリを再起動する必要があります。
これは、本当にイライラします。だから私を助けてください、どうすればビューが削除され、テーブルビューからもう一度クリックしたときに完全に再ロードされていることを確認できますか?
iphone - 奇妙な保持カウント(1初期化-3保持カウント)を修正する方法は?+編集:dealloc問題
したがって、私のコードは次のようになります。
そして私は得る:
この混乱を解決する方法は?何が間違っているのかわかりません。この部分では、メモリ不足が原因でアプリケーションがクラッシュすることがあります。
編集:関連する問題。
したがって、状況は上記で定義したものと同じですが、問題はArticleControllerControllerdeallocメソッドが呼び出されないことです。
その他のコード:
}
このメソッドが数回繰り返されると、ArticleControllerControllerは大量のさまざまなインターフェイス要素を作成しますが、そのdeallocメソッドはそれらを解放しません(保持カウントがゼロになることはありません)。したがって、ここに解決しようとしているメモリクラッシュの問題があると思います。今から数日。
どうしたの?これを解決するためにもっと何かできることはありますか?
objective-c - init で dealloc を呼び出していますか?
私はフレームワークを書いていて、カスタム init メソッドを持つオブジェクトを持っています:
エラーが発生した場合、メソッドdealloc内で呼び出しても安全ですか? initこれについてはよくわかりませんが、メモリ管理は私の人生で最も重要なことの 1 つです。
ありがとう。
objective-c - Deallocを使用した小さなコードでのメモリリーク
助けてください、このコードは正しいですか?つまり、このクラスに本当にdeallocメソッドが必要なのか、なぜ必要なのか、そうでないのか。ここでdeallocを使用しないと、メモリリークが発生しますか?ありがとう!
objective-c - アプリケーションの終了時に dealloc コードが確実に呼び出されるようにするにはどうすればよいですか?
NSObjectのドキュメントによると:
重要: アプリケーションが終了すると、プロセスのメモリは終了時に自動的にクリアされるため、オブジェクトに dealloc メッセージが送信されない場合があることに注意してください --- すべてのメモリ管理を呼び出すよりも、単にオペレーティング システムがリソースをクリーンアップできるようにする方が効率的です。メソッド。
それは問題ありませんが、オブジェクトの状態をディスクに保存したり、何かをログに記録したりするなど、dealloc で何かを行う必要がある場合はどうなりますか? コードが確実に呼び出されるようにするにはどうすればよいですか?
iphone - コールバックが割り当て解除されたインスタンスに送信されるのを回避する方法
次のプロセスにより、アプリがクラッシュします。
- ユーザーがビューを開き、リクエストがサーバーに送信されます
- リクエストはバックグラウンドで実行されます
- ユーザーはルートビューに戻ります
- リクエストは終了しました
そして、次のコードが実行されます
その間に、他のモデル/ビューの割り当てが解除され、メッセージが割り当て解除されたインスタンスに送信されます。
callbackタイプであり、プロトコルidに準拠しています。KalDataSourceCallbacks
メッセージが割り当て解除されたオブジェクトに送信されるのを回避するにはどうすればよいですか?
PS:私の質問はこの質問に似ています
編集:
メソッド(データソースクラス)でcallbacknilに設定してみます。deallocこれは問題を解決しません。これは、MyDataSource常に存在し、リリースされたdealloc場合にのみメソッドを呼び出す必要RootViewControllerがあるためです(アプリを閉じたときに何が起こるか)。
私がこれまでにしたこと:
今私の:MyDataSourceのプロパティによって保持されますRootViewController
KalViewControllerはそのデータソースを保持しません。カレンダーが破棄された後に解放できるように、dataSourceへの参照をインスタンス変数に格納することをお勧めします。
プロパティも作成しましたcallback:
現在、アプリはクラッシュしていません。デバイスでテストする必要があります。ここでは、deallocが呼び出されないため、追加callback = nilしても何も行われません。
MyDataSourceカレンダーが破棄された後、どのようにリリースすればよいですか?カレンダーが破壊されているかどうかわからないので、それは機能しません。したがって、dataSourceはアプリの実行時間全体にわたってのみ存続できます。
編集2:
リリースされているかどうかcallbackを確認できますか?nil
これは役に立ちません。
編集3:
デリゲートを保持したため、アプリはクラッシュしませんでした。
する必要があります
loadedDataSourceでは、特別な場合にメソッドが割り当て解除されたオブジェクトに送信されるのを回避するにはどうすればよいでしょうか。