問題タブ [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.
objective-c - Objective-C での dealloc の好みのコーディング スタイルは何ですか?
コーディング スタイルに関する議論は、大惨事や終わりのない炎上戦争で終わる傾向があることは知っていますが、それは私が到達したいことではありません。dealloc
過去 10 年間、私は主に Objective-C のメソッドの2 つの異なるコーディング スタイルを見てきました。最初の最も一般的なものはdealloc
、ファイルの最後に配置することでした。これは、Apple が Xcode のデフォルト テンプレートで使用するスタイルでもあります。この背後にあるロジックdealloc
は、オブジェクトの終わりが近づいたときに呼び出されるように思われるため、ファイルの終わりは素晴らしい比喩のようです。
一方、ディレクティブdealloc
の直下に置く傾向がある人もいます。@synthesize
私の意見では、これには2つの大きな欠点があります。
- ファイルの先頭には、退屈なコードが散らかっています。
- クラスで重要な部分を見つけるのは難しく、下にスクロールする必要があります。
私の意見では、大きな利点は、プロパティと対応するrelease
メッセージを視覚的に直接結び付けられることです。
もう 1 つは、既にリリースされている変数を niling することです。これが必要だとは思いませんが、特に変数全体がdealloc
終了後に破棄されるオブジェクトコンテキストでは、変数も nil する傾向があります。私は関数スコープ内の変数に対してこれを行うことに慣れているので、私のコーディング スタイルと一致しています。
これは私のクラスのほとんどがどのように見えるかです:
すでにいくつかの長所と短所について言及しました。このトピックについてどう思いますか? 使用しているコーディング スタイルdealloc
とその理由は何ですか? 私が言及するのを忘れた他の長所と短所はありますか?
私はここで炎上戦争を始めたくありません。あなたがどのスタイルを使用しているか、また、これに特定の理由があるかどうか、または最終的にこれが問題にならないかどうかを知りたいだけです.
java - Javaオブジェクトの明示的な削除を強制する
非常に高密度のトラフィックを大量に処理するJavaサーバーに取り組んでいます。サーバーはクライアント(多くの場合、数メガバイト)からのパケットを受け入れ、他のクライアントに転送します。サーバーは、着信/発信パケットを明示的に保存することはありません。それでも、サーバーは継続的にOutOfMemoryException
例外に遭遇します。
System.gc()
サーバーのメッセージパッシングコンポーネントに、メモリが解放されることを期待して追加しました。さらに、JVMのヒープサイズをギガバイトに設定しました。私はまだ同じくらい多くの例外を受け取っています。
だから私の質問はこれです:メガバイトのメッセージが無期限にキューに入れられていないことをどのように確認できますか(必要ではないにもかかわらず)?これらのオブジェクトで「削除」を呼び出して、ヒープスペースを使用していないことを保証する方法はありますか?
objective-c - NSMutableArray を宣言、割り当て、ロード、および解放する正しい方法
*.h ファイルで配列を宣言します。
*.m ファイルにメモリを割り当てます。
テスト ボタンをクリックして配列をロードします (最終的には、クリックするたびに異なる値をロードする必要があります)。
そして、私はここでそれを解放します:
それはすべて大丈夫に見えますか?
後でこのコードを実行するとクラッシュするため:
単純な「NSLog() とカウント」ですべてがクラッシュする理由がわかりません。
ダーク、
このように言いましょう: 私はポインター、配列、文字列、およびメモリについて大きな誤解を持っています。
見つけられるものはすべて読みましたが、(まだ) シンプルで明確でわかりやすい説明を見つける必要があります。
1つ提案できますか?(できれば10ページ未満の読書です。)このトピックだけを説明するリファレンスはありますか...そして「12年のコーディング経験があります...しかし、メモリやポインターの割り当てを扱ったことはありません」という観点から。 )
では、変数名はオブジェクトを参照する方法ではありませんか? では、なぜそれを持っているのですか?
私はこれを行う他の多くの言語に慣れています:
(もっと簡単かもしれません。)
これがこれを行う最も簡単な方法であるように私には見えます。(そして、それは機能しているように見えます。しかし、それは本当に正しいですか?)
anArray = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", nil]; で配列をロードしていません。代わりに、それを新しいインスタンスに置き換えています。さらに悪いことに、参照が実際には制御していないエンティティによって所有されているインスタンスに置き換えています。
わお。だから私は 20 の配列を持つことができます.すべて同じ名前: anArray と呼ばれます.それらはすべて異なるでしょうか? (GLOBAL 配列のようなものはありませんか?)
古い値を消去するには、removeAllObject メソッドが便利です。一度に複数の値を追加するために使用できるミューテーションメソッドもあります。
だから...最初に「すべてのオブジェクトを削除する」必要があります...そして、すべての新しい値を再追加する1つのメソッドを呼び出すことができます。
anArray = [[NSMutableArray arrayWithObjects:@"1", @"2", @"3", nil] 保持]; alloc/init シーケンスの代わりに。
わお。スペースを割り当てずに配列に格納することはできないと思いました。
本当に配列全体を置き換えるつもりなら、プロパティの使用を検討することをお勧めします
プロパティを使用してそれを行うにはどうすればよいですか?
このようなことをする正しい方法は何でしょうか:
私がするように:
わお。文字列、配列、メモリに関するすべてを完全に誤解しています。「簡単な方法」は、ONCEを割り当てることだと思いました...可変配列を使用して...必要なだけ変更して...一度解放します。
そうすることの問題は、この新しい配列が保持されないことです。
古い配列はなくなり、新しい配列を使用できると思います。(しかし、そうではないと思います。)
さらに、元の配列を解放していないため、メモリ リークが発生します。
古い配列は解放されるべきではないと思っていました...まだ終わっていません...新しい値を含むように変更したいだけです。(しかし、そうではないと思います。)
しかし、1 つは [anArray release] を使用することです。
私はそれが私が割り当てたメモリを解放する原因になると考えていました...(しかしそうではないと思います)...そして、より多くのメモリを再割り当てする必要があります。(しかし、そうではないと思います。)
anArray = [[NSMutableArray arrayWithObjects:@"1", @"2", @"3", nil] 保持];
それを「保持」しなければならないので、私の下から消えないようにするには?(なぜそうなるのかわからない。最終的なdealloc呼び出しで...に指示するまで。)
別の、おそらくより正しい修正方法は、常に新しい配列を作成する代わりに、addObject: または addObjectsFromArray: NSMutableArray メソッドを使用することです。
私は1つの配列を作成したいだけです...そしてそれを好きなように使用してください。配列に追加したくありません。私はそれを私の新しい価値観に設定したい。
cocoa - NSURLConnectionを使用しているときにエラーが発生しないようにするにはどうすればよいですか?
シナリオは以下のとおりです。
A tableViewController、B viewController、CScrollViewの2つのコントローラーを作成しました。tableViewControllerには、BviewControllerに入るセルがあります。B viewControllerには、Bの正面図であるCscrollViewがあります。
CscrollViewにはNSURLConnectionのオブジェクトがあります。これは画像をダウンロードするために機能しました。
(A-> pushViewController-> B(Cがあります)->(Cは開始後にNSURLConnectionを処理します))
画像のダウンロード中にCscrollViewを閉じると、エラーが発生します!! (ダウンロード終了後)B scrollViewControllerを解除すると、Cのオブジェクトが解放されるため。したがって、接続'didFinished'の後、Cデリゲートを検索しません(didFinishedを呼び出した後、Bオブジェクトメソッドを処理します)。
これがCのコードの一部です。
Bのdeallocメソッドはこちらです。
どうすればエラーが発生しませんか?私を助けてください...
iphone - iPhone:parentViewController で dealloc を呼び出すと例外が発生する
私は viewDidUnload と dealloc メソッドを扱っていますが、[super dealloc] を呼び出すときに問題が発生しました。親View Controllerで。
親View Controllerの外側に配置したカスタムコードを備えたView Controllerがたくさんあります。したがって、View Controller を定義するときに、スーパー クラスへの参照を設定します。
次に、dealloc メソッドで、AbstractViewController の dealloc メソッドを呼び出します。
[super dealloc] 次のコードを実行します。
iPhone シミュレーターでメモリ警告をシミュレートすると、次の例外がスローされます。
ただし、AbstractViewController の [super dealloc] 行にコメントを付けると、例外はスローされず、アプリは引き続き実行されます。
もう一度助けてくれてありがとう!
objective-c - カスタム オブジェクトの NSMutableArray の割り当てを解除する
カスタム オブジェクトの NSMutableArray の割り当て解除についてサポートが必要です。配列を保持する必要があるため、.h にプロパティを追加し、.m ファイルの dealloc で解放します。配列にオブジェクトを追加するときは、次のようにします。
さて、mycustomobject を解放する方法がわかりません。私が次のことをした場合:
後でアレイにアクセスすると、問題が発生します。ご意見をお聞かせください。
iphone - [CFArrayリリース]:割り当て解除されたインスタンスに送信されたメッセージ
コードで次のメソッドを使用しています。
これはうまくコーディングされた便利な方法ですか?私が思うに、それは自動リリースされたNSMutableArrayを返します。
このメソッドは別のメソッドによって呼び出されます。
このメソッド(otherMethod)は、返された配列を格納し、ViewControllerの割り当てを解除するときに解放したいViewControllerで呼び出されます。ただし、このビューコントローラで[結果の保持]が呼び出されると(使用可能にする必要があり、割り当てを解除できないため)、次のエラーが発生します。
[CFArrayリリース]:割り当て解除されたインスタンスに送信されたメッセージ
[result retainCount]
保持を呼び出す直前にログに記録しようとしましたが、「1」と出力されます。保持を呼び出すときにエラーがスローされる理由がわかりません。
ありがとうございました、
A
iphone - iPhone: ビューの割り当てが解除される前にビューのアニメーションを停止する方法
カスタム アニメーションを UITableViewCells に追加しました。各セルには独自のアニメーションがあります。ビューをポップすると、アニメーションが続行され、アニメーションが割り当て解除されたセルにアクセスしようとしているため、不適切な実行エラーが発生します。
ビューの割り当てが解除される前にアニメーションを停止するにはどうすればよいですか?
iphone - 現在のモーダルビューコントローラーでは、deallocメソッドは呼び出されません。
マイビューコントローラーにあります
DoctorListViewContrllerにあります
iphone - 複数のテーブルビュークラスを使用したスーパーデロックエラー
私はiPhoneアプリを初めて使用し、タブベースのアプリを作成しようとしています。両方のタブで画像の上にテーブルを配置しようとしています。オーディオリンクの表が表示されたタブと、ビデオリンクの表が表示された他のタブ。
これはすべて順調に進んでいます。2つのテーブルに対して2つのviewControllerを作成しました。すべてのコードは、それを機能させることを除けばうまく機能します。2番目のタブのvideoTableViewControllerの-(void)dealloc{}でスーパーdeallocをコメントアウトする必要があります。
そうでない場合は、次のエラーメッセージが表示されます。
FREED(id):メッセージnumberOfSectionsInTableView:解放されたオブジェクトに送信されます
助けてください、なぜそれがこれをしているのか分かりません...