問題タブ [ivars]

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 に答える
1962 参照

objective-c - @synthesizeを使用した自動iVar

iOS 4から、iVarをまったく宣言しない機能が追加され、プロパティを合成するときにコンパイラが自動的にiVarを作成できるようになったことを理解しています。ただし、この機能に関するAppleのドキュメントは見つかりません。

また、iVarとプロパティの使用に関するベストプラクティスまたはAppleが推奨するガイドラインに関するドキュメントはありますか?私はいつも次のようなプロパティを使用しています:

.hファイル

.mファイル

iVar名としてindexPathの代わりに_indexPathを使用して、を使用するindexPath必要があるときに使用しないようにしていますself.indexPath。しかし、iOSが自動プロパティをサポートするようになったので、それについて心配する必要はありません。ただし、iVar宣言を省略した場合、deallocでのリリースをどのように処理する必要がありますか?プロパティメソッドを使用するのではなく、deallocでリリースするときにiVarsを直接使用するように教えられました。設計時にiVarがない場合、代わりにプロパティメソッドを呼び出すことはできますか?

0 投票する
3 に答える
488 参照

iphone - 配列から値を受け入れるNSStringivarを取得できません

いくつかのデータ(いくつかのfloat、いくつかの文字列)をplistに保存してから、それらを読み戻しています。それらを読み返すとき、ビューコントローラのいくつかのivarに割り当てます。それらは単なるivarであり、プロパティではありません。

フロートはそれらの値をうまく取り、私はNSLogそれらを見ることができ、それらが正しいことを確認します。しかし、何を試しても、NSStringivarに文字列値を取得させることはできません。

例:配列の位置6と7には文字列がPortland, OR"あり"Pacific Daylight Time"、それらに格納されています-plistから読み戻して*array.

これ:

この結果:

これが発生するメソッドの最後にブレークポイントを設定し、両方のNSStringivarについて、小さなポップアップメッセージに次のように表示されます。Invalid Summary.

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

objective-c - Objective-c: KVC を使用しているときにプライベート ivar が外部アクセスから隠されない理由

KVC を使用して ivar にアクセスしようとした後、プライベートおよび保護された ivar に保護がないことに気付きました。ivar (プライベートまたは保護されたキーワード) の前に何を置いても問題ありません。KVC メソッド「setValue」を使用する場合、ivar は常にパブリック ivar です。これは私のコードで、7 つの ivar とプロパティのすべてがクラス インスタンスの外で変更可能です。

出力の結果 > public_num = 1、protected_num = 2、private_num = 3、public_property = 4、private_property = 5、very_private_num = 6、very_private_property = 7。

private インターフェイスで宣言された ivar であっても、クラス外では変更可能です。では、カプセル化を強制し、「ivar を悪意のある他のプログラマーから保護する」にはどうすればよいでしょうか :)

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

objective-c - サブクラス内のivarのクラスを(派生クラスに)変更する

2つの基本クラスがあると仮定ContainerGizmoます。クラスContainerには、クラスのインスタンス変数がありますGizmo

今、私はサブクラス化Container(それを呼び出しますSubContainer)し、サブクラス化GizmoSubGizmo)もします。のいくつかのメソッドでは、持っていないが持っているSubContainerいくつかのプロパティにメッセージを送信する必要があります。これらのメッセージを送信できるように、ivarをオーバーライドしてクラスに含める方法はありますか?GizmoSubGizmoSubGizmoSubContainer

今のところSubGizmo、そのようなプロパティやメソッドを使用する必要があるたびに、継承したivarをキャストすることで機能させることができます。

これが私がそのような振る舞いをしたい理由です:私はすでに動作するゲームを持っていますが、追加するモードが多いほど、それを維持するのが難しくなります。各モードで実行されるメソッドを変更/追加したい場合; 3つの異なるゲーム(コントローラーオブジェクト)に移動して変更を加える必要があります。

サブクラス化することで、メインのゲームメカニズムを基本クラスに保持し、モードごとにサブクラスを作成したいと思いました。このように、基本クラスで行った変更は、各モードに反映されます。ただし、各コントローラーとゲームオブジェクトには、異なるモード用の新しいメソッドがあり、相互にメッセージを送信します。これが私の問題の原因です。

0 投票する
0 に答える
95 参照

objective-c - Obejctive cのIvarsタイプNsstringは、ボタンイベント後にnilになります

私はまだこれを理解していません。クラスのivarを作成した場合(プロパティなし)。たとえば、ivarを直接に設定する@"patrik"- (void)viewDidLoad、ボタンをクリックしてハンドラーでIvar値を確認しても、ivar値はまだそこにあります。

しかし!ボタンが2つある場合。クリックで起動する最初のボタンハンドラーでivarを直接設定します。次に、起動した2番目のボタンハンドラーでIvarを確認します。次に、ivar iは空ですか?

誰かが何が起こっているのか説明できますか?

これがコードです。シンプル:

ここで、2番目のボタンを押しても、Ivarはまだここにあります。


しかし、ここでは、最初のボタンを押してから2番目のボタンを押した後ではありません!?

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

iphone - Xcode 4.5 での @property と ivar の違い

以前は、このようなプロパティと iVar の使用例を常に見てきました...

SomeClass.h の内部

次に SomeClass.m で

最近 (WWDC 2012 のビデオで) 、 iVar を関連付けずに を@synthesize使用することをお勧めします。@property

したがって、上記は次のように変更されます...

SomeClass.h

SomeClass.m

これは@propertyivar を使用していないだけです。これは理にかなっており、私はそれを使用しています。

しかし、私はまたの例を見てきました...

SomeClass.h

SomeClass.m

これには、プライベートiVarといいえがあり@propertyます。

違いは何ですか?アクセサーメソッドも提供することは理解してい@propertyますが、アクセサーメソッドをオーバーライドする必要はありません。デフォルトのアクセサーをそのまま使用できます。

では、いつ ivar ではなく @property を使用し、いつ ivar のみを使用して を使用しないの@propertyでしょうか? そして、なぜ ivar を完全に取り除き、単に使用しないの@propertiesでしょうか? プライベートにする必要がある場合は、 .mのインターフェイス拡張内で使用してください。

メモリ管理に関する回答へのクイック編集。私は ARC を使用していますが、私にとっては、iVar を使用するよりも、使用strongした方がメモリ管理をより細かく制御できるように思えます。weak @properties

質問が十分に明確であることを願っています。

ありがとう

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

objective-c - Objective-C-プリミティブ型の静的フィールドまたはivar

最近、ivarフィールドとstaticフィールドのどちらかを選択する途中で立ち往生しています。例:信号機を赤と緑の間で切り替える必要があります。そこで、isRedというフラグを付けました。これまでこの目的で静的ブール値を使用してきましたが、非常にうまく機能しています。今、私はこれにインスタンス変数を使用することもできると思いますが、それらの違いはわかりません。これら2つの方法の本当の違いは何ですか?

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

objective-c - クラス拡張のプロパティが Objective C のクラスに追加されるのはいつですか?

私は、Objective C のクラス拡張は単なる無名のカテゴリであるという印象を受けました。ただし、これらのクラス拡張にプロパティを追加することはできますが、これはカテゴリでは不可能であるため、少し混乱しています。

クラス拡張機能はどのように実装されていますか? カテゴリーとして?では、なぜ iVar を追加できるのでしょうか? クラス拡張機能がクラスに追加されるのは、コンパイル時またはクラスのロード時ですか?