問題タブ [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.
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がない場合、代わりにプロパティメソッドを呼び出すことはできますか?
iphone - 配列から値を受け入れるNSStringivarを取得できません
いくつかのデータ(いくつかのfloat、いくつかの文字列)をplistに保存してから、それらを読み戻しています。それらを読み返すとき、ビューコントローラのいくつかのivarに割り当てます。それらは単なるivarであり、プロパティではありません。
フロートはそれらの値をうまく取り、私はNSLog
それらを見ることができ、それらが正しいことを確認します。しかし、何を試しても、NSStringivarに文字列値を取得させることはできません。
例:配列の位置6と7には文字列がPortland, OR"
あり"Pacific Daylight Time"
、それらに格納されています-plistから読み戻して*array.
これ:
この結果:
これが発生するメソッドの最後にブレークポイントを設定し、両方のNSString
ivarについて、小さなポップアップメッセージに次のように表示されます。Invalid Summary.
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 を悪意のある他のプログラマーから保護する」にはどうすればよいでしょうか :)
objective-c - サブクラス内のivarのクラスを(派生クラスに)変更する
2つの基本クラスがあると仮定Container
しGizmo
ます。クラスContainer
には、クラスのインスタンス変数がありますGizmo
。
今、私はサブクラス化Container
(それを呼び出しますSubContainer
)し、サブクラス化Gizmo
(SubGizmo
)もします。のいくつかのメソッドでは、持っていないが持っているSubContainer
いくつかのプロパティにメッセージを送信する必要があります。これらのメッセージを送信できるように、ivarをオーバーライドしてクラスに含める方法はありますか?Gizmo
SubGizmo
SubGizmo
SubContainer
今のところSubGizmo
、そのようなプロパティやメソッドを使用する必要があるたびに、継承したivarをキャストすることで機能させることができます。
これが私がそのような振る舞いをしたい理由です:私はすでに動作するゲームを持っていますが、追加するモードが多いほど、それを維持するのが難しくなります。各モードで実行されるメソッドを変更/追加したい場合; 3つの異なるゲーム(コントローラーオブジェクト)に移動して変更を加える必要があります。
サブクラス化することで、メインのゲームメカニズムを基本クラスに保持し、モードごとにサブクラスを作成したいと思いました。このように、基本クラスで行った変更は、各モードに反映されます。ただし、各コントローラーとゲームオブジェクトには、異なるモード用の新しいメソッドがあり、相互にメッセージを送信します。これが私の問題の原因です。
objective-c - Obejctive cのIvarsタイプNsstringは、ボタンイベント後にnilになります
私はまだこれを理解していません。クラスのivarを作成した場合(プロパティなし)。たとえば、ivarを直接に設定する@"patrik"
と- (void)viewDidLoad
、ボタンをクリックしてハンドラーでIvar値を確認しても、ivar値はまだそこにあります。
しかし!ボタンが2つある場合。クリックで起動する最初のボタンハンドラーでivarを直接設定します。次に、起動した2番目のボタンハンドラーでIvarを確認します。次に、ivar iは空ですか?
誰かが何が起こっているのか説明できますか?
これがコードです。シンプル:
ここで、2番目のボタンを押しても、Ivarはまだここにあります。
しかし、ここでは、最初のボタンを押してから2番目のボタンを押した後ではありません!?
iphone - Xcode 4.5 での @property と ivar の違い
以前は、このようなプロパティと iVar の使用例を常に見てきました...
SomeClass.h の内部
次に SomeClass.m で
最近 (WWDC 2012 のビデオで) 、 iVar を関連付けずに を@synthesize
使用することをお勧めします。@property
したがって、上記は次のように変更されます...
SomeClass.h
SomeClass.m
これは@property
ivar を使用していないだけです。これは理にかなっており、私はそれを使用しています。
しかし、私はまたの例を見てきました...
SomeClass.h
SomeClass.m
これには、プライベートiVar
といいえがあり@property
ます。
違いは何ですか?アクセサーメソッドも提供することは理解してい@property
ますが、アクセサーメソッドをオーバーライドする必要はありません。デフォルトのアクセサーをそのまま使用できます。
では、いつ ivar ではなく @property を使用し、いつ ivar のみを使用して を使用しないの@property
でしょうか? そして、なぜ ivar を完全に取り除き、単に使用しないの@properties
でしょうか? プライベートにする必要がある場合は、 .mのインターフェイス拡張内で使用してください。
メモリ管理に関する回答へのクイック編集。私は ARC を使用していますが、私にとっては、iVar を使用するよりも、使用strong
した方がメモリ管理をより細かく制御できるように思えます。weak
@properties
質問が十分に明確であることを願っています。
ありがとう
objective-c - Objective-C-プリミティブ型の静的フィールドまたはivar
最近、ivarフィールドとstaticフィールドのどちらかを選択する途中で立ち往生しています。例:信号機を赤と緑の間で切り替える必要があります。そこで、isRedというフラグを付けました。これまでこの目的で静的ブール値を使用してきましたが、非常にうまく機能しています。今、私はこれにインスタンス変数を使用することもできると思いますが、それらの違いはわかりません。これら2つの方法の本当の違いは何ですか?
objective-c - クラス拡張のプロパティが Objective C のクラスに追加されるのはいつですか?
私は、Objective C のクラス拡張は単なる無名のカテゴリであるという印象を受けました。ただし、これらのクラス拡張にプロパティを追加することはできますが、これはカテゴリでは不可能であるため、少し混乱しています。
クラス拡張機能はどのように実装されていますか? カテゴリーとして?では、なぜ iVar を追加できるのでしょうか? クラス拡張機能がクラスに追加されるのは、コンパイル時またはクラスのロード時ですか?