問題タブ [ivar]
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 - iOS、アンダースコアを使用するのか、iVarを直接使用するのか
これは多くの質問がありますが、この質問は、これらの各方法をいつ使用するかの例を取得することです。セッターとゲッターの無限ループ以外の例を使用してください
例。
.h-
@property(nonatomic, strong)NSMutableArray* mutArray
.m-
@synthesize mutArray= _mutArray;
1)私は欲しいですか:
_mutArray = [[NSMutableArray alloc] init];
または
self.mutArray=[[NSMutableArray alloc] init];
なぜ私はそれらのそれぞれを行うのですか、そして違いは何ですか?!
2)オブジェクトを追加したい場合...
[_mutArray addObject:object];
または
[self.mutArray addobject:object];
なぜ?!
本当にありがとう!
objective-c - [super init] を許可している間、ObjC の「抽象」クラスの init メソッドが呼び出されないようにしますか?
ユーザーがインスタンス化してはならない疑似抽象基本クラスがあるとします。基本的に、クラスで init を呼び出そうとしたり、具体的なインスタンスの 1 つをデフォルト値で返そうとしたときに、警告をスローしたいと考えています。
ただし、その基本クラスの具体的な実装では[super init]
、初期化子を呼び出す必要があります。もちろんそれは許されるべきです。
これについてどうすればよいでしょうか?
私はこれでいいと思っていました:
このアプローチに関する懸念はありますか?init
他の人がまだ内部メソッドを呼び出すことができることは知っていますが、ユーザーが最初に呼び出そうとするものであるため、許可しないことを主に懸念しています.
objective-c - theos エラーで IVAR をフックする
いくつかのヘッダー ファイルを復号化しました。これは、そこからいくつかの ivar をフックしたいヘッダー ファイルです。
したがって、gatingChecker ivar をフックしたいと思います。logify を使用すると、次の行が作成されました。
これをコンパイルしようとすると、次のようになります。
ruby - Ruby で iVar クラスを明示的に設定する (ala Obj-C)
私は経験豊富な Obj-C/Java プログラマーで、Ruby を始めています。もちろん、これほど動的であるという事実は素晴らしいことです (クラスを再開できるのは素晴らしいことです!) が、Ruby コードを書き始めたときに、私を悩ませたり心配させたりすることが 1 つあります。
独自のクラスで iVar のタイプを明示的に設定するために、Ruby er が (もしあれば) 何をするかを知りたいです。私が見る限り、iVar を任意のオブジェクトに設定でき、Ruby は文句を言いません。ただし、特定の iVar が特定のタイプであると予想される場合は、後で問題が発生する可能性があります。例えば:
NoMethodError
もちろん、配列にはメソッドがないため、このコードは をスローしupcase
ます。残念ながら、実際にどこが間違っていたのか (上記の行、作成時str2
) はわかりません。そのため、デバッグ時にはあまり役に立ちません (str2
目立たない場所にいくつかのモジュールが作成された場合)。次のようにいくつかのチェックinitialize
:
これで、誤って新しい MyString を作成してしまった場合、自分がいかに愚かであったかを知らされます (さらに重要なのは、失敗したときではなく、いつ作成したかを知らされることです。入力するのは少し面倒ですが、問題ありません。私の次の問題attr_accessors
iVar で使用することを決定したときです。
定義されたセッターを使用すると、非常にこっそりとエラー チェックを回避できますinitialize
。uppercase_my_string
繰り返しますが、これには、誤っ@my_string
て配列に設定した場合ではなく、例外をスローするという問題があります。
最後に、アクセサーを手動で作成してエラー チェックを追加することもできますが、これは非常に面倒です...これを行うためのより迅速で簡単な方法はありますか。それとも、私は心を閉ざしていて、十分にダイナミックではありませんか?
ありがとう!
余談ですが、Obj-C でも実行時に同じ問題が発生することはわかっていますが、通常、型のオブジェクトを型array
の変数string
(または類似のもの) に代入しているというコンパイラ エラーが表示されるので、少なくともどこで発生するか警告されます
appdelegate - appdelegate からビュー コントローラ ivar にアクセスする
ビューコントローラークラスで NSURLConnection を使用して接続を作成します。AppDelegate が applicationWillResignActive メソッドを呼び出すときに、接続が nil であることを確認したいと考えています。
AppDelegate からその ivar を呼び出す方法がわかりません。このサイトに答えがあります:
appDelegate や他のビュー コントローラで変数にアクセスできるようにする方法は?
これはうまくいくかもしれませんが、別の方法はありますか?
ありがとう
objective-c - OBJC_IVAR_$ をバイナリに変更
古いバージョンのフレームワークでは、A と B の 2 つのクラスがあり、A は B のサブクラスでした。新しいバージョンでは、B は存在せず、B のすべて (ivars など) は現在 A にあります。実行可能ファイルは古いバージョンに対してリンクされているため、_OBJC_IVAR_$_B.ivar を探します。ただし、新しいバージョンで動作する必要があります (再コンパイルできません)。_OBJC_IVAR_$_A.ivar への参照を変更する方法はありますか?
objective-c - Objective-C で public インスタンス変数を宣言する必要がある
Objective-C (iOS 用) でカスタム ボタン クラスのインスタンス変数をいくつか宣言しようとしています。
ただし、これらは現在プライベートであるため、他のクラスからアクセスできる必要があります。それらのアクセサ関数を作成できると思いますが、変数自体を公開するにはどうすればよいでしょうか?
objective-c - C 配列を Objective-C 構造体プロパティ内に配置する際の驚くべき失敗
Objective-C では、C 配列をプロパティ型として使用できないことはわかっています。その場合、予想されるコンパイラエラーが発生します。
しかし、構造体プロパティ内の C 配列に関して私が見ている動作には驚いています。
- コンパイル エラーや警告はありません。
- アドレス自体の予期しないアドレス (gdb
info malloc
はそれについて知りません。それが初期化されていないメモリなのかどうかはわかりません。しかし、メモリが破損しているにもかかわらず、クラッシュするか、明らかに動作していると予想されます)。 - 割り当てはノーオペレーションになります。
このサンプルコードを煮詰めました:
上記の私のパズルポイントの説明はありますか?
objective-c - Objective C のイディオム - プロパティ、ivar、needsDisplay
これは私がよく遭遇する状況であり、定型コードが無駄であり、私だけではないと確信できるほど十分です。これは一義的ですか、より良い方法はありますか、それとも毎回行う必要がありますか?
これにより、追加できるゲッターを取り除くために、ゲッターがないというコンパイル警告が発生します
しかし今、ivarがないと不平を言うので(定義されたゲッターとセッターは私のために作成されていないことを意味するため)、追加する必要があります
つまり、プロパティが変更されたときに表示を強制的に更新したいだけで、かなりのオーバーヘッドが発生します。
(a) ゲッターと ivar を作成するつもりだったことを ObjC に伝える方法があるので、セッターだけを書く必要があるか、または (b) プロパティが見た目が変わる?
Apple の SDK はこれをどのように行うのですか (UILabel ソースなど、何らかの表示方法を見逃していないと思います)。