問題タブ [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 - [myVardealloc]と[myVarrelease]の違いを最もよく説明しているのは何ですか?
私は違いを知っていると思いますが、それを正しく説明する方法がわかりません。
Deallocは、その変数によって予約されているメモリを完全かつ即座に削除します。
releaseは、その変数のメモリの保持カウンタを-1だけデクリメントします。1の場合は0なので、その瞬間のdeallocと同じ効果があります。
そうですか?またはより良い簡単な説明がありますか?
iphone-sdk-3.0 - dealloc 関数で IBOultet を解放する必要がありますか?
.h ファイルに次のようなものがある場合:
.m ファイルの dealloc 関数で解放する必要がありますか?
objective-c - init メソッドと dealloc メソッドでのアクセサーの使用は有効ですか?
いくつかの情報源 (stackoverflow.com、cocoa-dev、ドキュメント、ブログなど) から、init メソッドと dealloc メソッドでアクセサーと設定 (foo、setFoo:) を使用するのは「間違っている」と聞いています。そうすることで、プロパティを監視している他のオブジェクトを混乱させる可能性がわずかにあることを理解しています。(簡単な例をここに示します)
ただし、次の理由により、この慣行には同意しないと言わざるを得ません。
新しい Objective-C ランタイム (iPhone のランタイムと 10.5 の 64 ビット ランタイム) では、対応する ivar を宣言せずにプロパティを宣言できます。たとえば、次のクラスは 10.5 または iPhone (シミュレータではなくデバイス) で問題なくコンパイルされます。
上記が完全に有効な Objective-C クラスであることを理解した上で、イニシャライザとメモリ管理の目的で dealloc メソッドを作成するとします (iPhone では GC を使用できないため)。イニシャライザと解放についてこれまでに読んだことはすべて、次の 2 つのメソッドを作成することにつながります。
ただし、ドキュメントと一般的な意見によると、これは「間違っています」。だから私の質問はこれです:
- アクセサーを使用せずに someObject を初期化するにはどうすればよいですか? コンパイラ (またはランタイムなど) が someObject が既に nil に設定されていることを保証すると言うかもしれませんが、それに依存するのは不適切な動作だと思います。C のバックグラウンドがかなりあるので、変数を適切に初期化していないためにかなりの数のバグを見てきましたが、これはほとんど変わらないようです。
- dealloc メソッドでアクセサーを使用することになっていない場合、someObject を解放するにはどうすればよいですか?
これらのいずれかに対する答えが「できない」である場合、init および dealloc メソッドでアクセサーを使用することがどうして悪いのでしょうか?
iphone - UIApplicationDelegate が所有するオブジェクトの割り当てを解除する利点はありますか?
ベスト プラクティスはさておき、UIApplicationDelegate クラスが所有するオブジェクトを作成し、アプリケーションの実行中ずっとそのままにしておく場合、UIApplicationDelegate の dealloc メソッドに [object release] ステートメントを追加するメリットはありますか?
呼び出されるのは、ユーザーがアプリケーションをシャットダウンするときだけであり、そのアプリケーションで使用されていたメモリ領域全体が解放されると想定しています。
ベスト プラクティスの観点からは、確かに、メモリ管理コードをアプリケーション全体に一貫して追加することは理にかなっていますが、実行の観点からは、それが実際に問題になるかどうかに興味があります。
注: iPhone 開発者の観点からこれを求めています。それが Mac OSX の観点と異なるかどうかはわかりません。
objective-c - インスタンス ID を NSLog に出力しますか?
クラスの dealloc メソッドでは、割り当てを解除するインスタンスの ID (またはその他の一意の識別子) をどのように出力しますか?
これは可能ですか?学習の補助として、コンソールでもう少しフィードバックを得ようとしています。
どうもありがとう -ゲイリー-
objective-c - 解放されたオブジェクトが最終的に破棄されるのはいつですか?
Objective-C でオブジェクトを解放すると (その解放カウントが 1 であると仮定)、その解放カウントは 0 に減分され、dealloc メソッドが呼び出されます。オブジェクトはその場ですぐに破棄され、[super dealloc] の後に破棄されますか? それとも、プールに追加され、プールが空になったときに破棄されますか?
リリースされたオブジェクトは、dealloc の最後 ([super dealloc] が呼び出されたとき) に破棄されると想定します。autorelease 変数がプールに追加されることは知っていますが、通常のリリースされたオブジェクトがどうなるかを確認したかっただけです。
乾杯 -ゲイリー-
iphone - iPhoneのOpenGLESテクスチャが本当に割り当て解除されているかどうかを確認することはできますか?
マニュアルはちょうどあなたに書くように指示しました:
そして、テクスチャが削除されると主張します。iPhoneのメモリはほとんどないので、これらのテクスチャが本当にリリースされるようにしたいと思います。
Leaks機器はこれを検出できず、率直に言って、私は少し心配しています。テクスチャが本当になくなっていることを確認したいのですが。
ありがとうございました。
objective-c - 継承のリリース順序?
現在のテストでは、「celestialClass」から継承するクラス「PlanetClass」があります。私の質問は、「PlanetClass」オブジェクトを解放すると、両方のdeallocメソッドを通過し、最初にPlanetオブジェクトを解放し、次にCelestialオブジェクトを解放することです。iVar "bodyName"をリリースできるように、deallocをcelestialに追加しました。確認したかったのは、この権利があると思いますか?
乾杯-gary-
objective-c - Objective-C オブジェクトが dealloc:ed を取得しない
Objective-C でオブジェクトの割り当てが解除されないという問題があります。これはどこかに保持されているためだと確信していますが、どこにあるのかわかりません (retainCount が 0 であるべき場所をチェックすると、1 が返されます)。私は自分のコードを何度も調べてきましたが、リリースしていないコードを保持しているものを確認できませんでした。私が使用しているフレームワークのバグでさえあるかもしれません。
このようなものにどのように対処しますか?メモリを検索して、このオブジェクトを指しているものを確認して、なぜこのような状態になっているのかをかなり簡単に理解できると思いましたが、それを達成する方法がよくわかりません. 多分別の解決策?
iphone - iPhone - removeFromSuperview 時にサブビュー UIViewController の割り当てを解除
メイン UIViewController (メイン メニュー) にいくつかのボタンがあり、メイン メニューの上にサブビュー UIViewController を作成して追加します。サブビューを削除すると、そのコントローラーからのメモリは解放されません。そのサブビューのメモリをすぐに解放するにはどうすればよいですか?
誰にも例がありますか?これは私のすべての問題を解決するでしょう!前もって感謝します。
サブビューを追加する方法は次のとおりです