問題タブ [retain]

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 投票する
3 に答える
260 参照

iphone - setTitle(UIButtonクラス)での自動解除はありますか?

誰もが知っているように、setTitle はパラメーターとして渡された文字列を自動的に保持します。ボタンのキャプションを変更する必要がある場合、新しい文字列を設定する前に現在の (古い) 文字列を解放する必要があると思います。ドットを付ける最もエレガントな方法は何だろうか。

私のコード サンプルを参照してください (ここで、getPlayerHandFromGame メソッドは、setTitle が呼び出されたときに保持される自動解放された文字列を生成します)。

ボタンのキャプションが数回更新されるため、コードのこの部分は数回呼び出されます。タイトルを設定する前に、次のようにする必要があると思います。

もう使用されない文字列を解放するため (titleForState は NSString へのポインターを返します)。

デバイスのメモリに未使用の文字列がロードされるのを避ける正しい方法ですか?

どうもありがとう、Apple92

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

iphone - arrayWithContentsOfURLを使用すると、NSURLに多くの保持が配置されます

plistを指すURLからNSArrayを作成しています

なぜこれが起こっているのか、私は完全に途方に暮れています。さらに詳しい情報が必要な場合はお知らせください。

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

sas - SASでオブザベーションを削除している間、操作を保持するにはどうすればよいですか?

問題は、elseが実行されている場合、Sの増分が実行されないことです。何か案が?

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

iphone - iPadでの外部画面の処理

わかりました。iPadに外部画面を実装する正しい方法を誤解した可能性があると思います。それは私に多くの頭痛の種を引き起こしています。 これは長い投稿なので、私がやろうとしているのは、ビューを作成してVGA経由で外部画面に送信し、それが終わったら画面を削除することです。カウントの保持の問題が発生しているため、機能させることができません。

私はいつでもiPadに呼び出すことができるViewControllerを持っています。このビューが読み込まれると(Keynoteプレゼンテーションと同様にリモートです)、外部画面を確認してから、ウィンドウを作成し、追加のモニターにビューを追加します。

私のipadViewController.h <-iPadにとどまるビュー

私は持っています

(もっとありますが、それは外部画面のものです)。

ipadViewController.m

したがって、ビューが読み込まれるときに、いくつかのことを実行しようとします。

外部画面を取得する(可能な場合)を作成しpresentationViewController、追加の画面に追加します

画面を取得するには、次のようにしますgetExternalScreen:

それにビューを送信するにはcreatePresentationAndSendToWindow:

私は次のdeallocようにクリーンアップしようとします:


私が抱えている問題は、remoteViewController(モーダルです)を閉じると、リリース後にexternalScreen保持カウント= 1になり、externalWindowの保持カウント=2になることです。

externalWindow releaseリリースしないと、原因のクラッシュは消えますpresentationView(しかし、リークしてpresentationViewいます。

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

iphone - 合成されたプロパティを持つ alloc + init - 保持カウントが 2 増加しますか?

次のスニペットをかなり見ました。

ヘッダー内:

実装ファイル内:

その後

この割り当てにより、「bla」の保持カウントが 2 つ増えると思います。1 回 alloc/init 呼び出しを介して、次に、合成されたプロパティ セッターを介して発生するように要求した保持を介して。

その結果、通常、次のようにプロパティを宣言します。

ヘッダー内:

実装ファイル内:

その後

私の最初の仮定が正しければ、これを行うための「正しい」方法、つまりプロパティの宣言、初期化、およびメモリ管理があるかどうかを知りたいです。

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

objective-c - alloc/retain/release を使用する可能性のあるシナリオは?

私は客観的な c をほぼ 1 週間使用しており、主に c++ コーダーです。Apple のメモリ管理ガイドを読んだ後、C++ でのメモリ使用スタイルを目的の C に持ち込もうとしました... これらのシナリオを結論付けようとしました。これらの手順に従えば、メモリの間違いはないと思います。私が間違っている場合は、親切にお知らせください:)

個人的に言えば、自動解放を使用しないようにします。自動解放を使用すると、特定の自動解放プールが空になる前に、常に冗長なメモリが存在する可能性があります。release のみを使用します。これにより、アプリケーションが常に最小限のメモリを使用するようになります。

Apple が言うもう 1 つのことは、私自身の言葉で説明すると、次のとおりです。retain/alloc/copy を追加するたびに、どこかにリリースを追加する必要があります。

私が結論付けるすべてのシナリオは次のとおりです。

  1. 同じ関数内:オブジェクトの割り当て、使用および解放

  2. クラスのinit関数でオブジェクトを割り当て、クラスのdealloc関数でオブジェクトを解放する

  3. ポインターを所有する必要がある場合は、クラスのメソッド (メソッド Aとしましょう) で入力ポインターを保持し、クラスのdealloc関数でポインターを解放する必要があります。

    客観的なcでretainを使用するタイミングは、c/c++でmemcpyを使用するタイミングと同じであることがわかったので、 retainを「メモリ効率の良いコピー」と見なします

    入力保持ポインターがメンバーポインター変数に設定される場合は、最初にメンバーポインターを解放する必要があります。したがって、case[3] では、クラスのinitのallocメソッド Aのreleaseと対になり、メソッド A保持deallocのreleaseと対になります。

  4. 戻り値としてポインタを返します。正直なところ、C++ を使用するときは、そのようなことは決してしません。メンバー ポインターを返す場合は問題ありません。誰かが面倒を見てくれます:

    しかし、ローカルに割り当てられたオブジェクトへのポインターを返すのは本当にひどいことです。

    その場合は autorelease を使用する必要があると言う人もいるかもしれませんが、これを使用してそのソリューションをバイパスしたいだけです: メンバー ポインターのみを返すか、ポインターを返さないか、指定された入力ポインターのみを操作します。

    /li>

したがって、上記のメモリ使用方法に従って問題が発生した場合は、お知らせください。

ありがとう

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

cocoa - NSMenuItem -setTarget: ターゲットを保持しますか?

NSMenuItem -setTarget: ターゲットを保持しますか、それとも明示的に保持する必要がありますか?

これについて矛盾するドキュメントを見てきました。NSInvocationのretainArgumentsは知っていますが、NSInvocationから継承されていないため、これがNSMenuItemに適用されるかどうかはわかりません。

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

ios - データメンバーと通知を保持

2 つの本当に基本的な説明が必要です。

1.

次のように宣言されたメンバーを持つクラス A があるとします。

私のメソッドの 1 つで、stringInstanceVariable を何らかの文字列に初期化したいと考えています。保持する必要がありますか?

私は電話する必要があります:

または

または多分私は電話する必要があります:

2.

インターフェイス ビルダーを使用して、たとえばテキスト フィールド コントロールを右クリックすると、メソッドのリストが表示されます。それらは正確には何ですか?登録して観察できるという通知?そして、IBを使用してそれらを実装して接続できることを知っています。たとえば、コードだけを使用してIBなしでこれを行うことができるかどうか、またその方法を知りたいだけです。「addTarget:action:forControlEvent」を使えばできるかもしれません。

しかし、その場合、Cocoa のイベントと通知の違いは何ですか? または委任と比較する方が適切です。

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

objective-c - NSMutableArray による保持と自己

私の .h ファイルには、次のようにプロパティで定義された NSMutableArray *locationsArray があります

私の .m ファイルでは、テーブル ビューを表示していました。これは、ロールアップを試みるまで問題なくロードされ、その時点でアクセス不良でクラッシュしました。これは、locationsArray が保持されていないことが原因でした。

このコード行は、.m の問題を修正しました

このコード行も同じ問題を修正しました

明確にする必要がある質問がいくつかあります

  1. alloc initこれは、この値を設定する正しい方法alloc initwithArrayですか?
  2. 私が理解しているJavaの世界から来たのselfはこれです、または少なくとも私はそう思っていました...オブジェクトCの違いは、保持を追加しlocationsArrayないselfと保持されないことです。

明らかに、私はそれを機能させましたが、時間がかかり、その理由についてまだ少し混乱しています. 任意の助けをいただければ幸いです。

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

objective-c - Objective-Cでリリースするタイミングに関するリファレンス

Objective-Cで繰り返し問題が発生しています。私は物事を何度もリリースしているか、十分ではありません。または多分私はそれらを十分に保持していません...

誰かが私に、保持して解放する必要があるときに経験則を与える良い参考資料を教えてもらえますか?

例えば:

一部のオブジェクトは事前に保持されていることをどこかで読んだことを覚えているので、それらを解放する必要がありますが、保持する必要はありません。これらはどのオブジェクトですか?

オブジェクトを割り当て、そのメソッドでのみ必要な場合、それを解放する必要がありますか?それを保持しますか?

もちろん、何かを保持している場合は、それを解放する必要がありますが、それを超えると、少し迷子になります。