問題タブ [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.

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

objective-c - インスタンス変数オブジェクトにメモリを割り当てるための init メソッドのオーバーライド

initオブジェクトを初期化すると ivar オブジェクトも初期化されるように、クラスのメソッドをオーバーライドしようとしています。

1) このコードは機能しますか? それでも、このソリューションは推奨されませんか?
2)if条件がないのはなぜ==ですか? 課題ですか?もしそうなら、なぜifですか?

これが明らかな場合は申し訳ありません!>_<

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

objective-c - __weakivarがniledされたときにアクションを実行したい

私はivar@class Fooを含むを持っています。__weak id bar異なるクラスのメソッドからのいくつかのアクションにより、オブジェクトが消えて、barナイルになる可能性があります。

ivarがARCによって自動的に無効化されたときにアクションを実行したいと思います。

bar可能であれば、プロパティに変換したり、Key-ValueObservingを使用したりすることは避けたいと思います。

これも可能ですか?そうでない場合、KVOはプロパティ以外のivarに対して使用できますか?

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

android - アクションバーボタンからフラグメントをリロードすると、ivar が null になるのはなぜですか?

3 つのタブを持つアプリがあります。各タブのフラグメントは、SectionsViewPager で作成されます。Reloadable1 つのメソッドでインターフェイスを作成しましたvoid reload(Context ctx);。actionBar にリロード ボタンを追加しました。ボタンが押されると、フラグメントが実装されているかどうかを確認し、実装されReloadableている場合は を呼び出しますreload(this);

ここまでは順調ですね...

アプリには以前にプルして更新する機能が含まれていましたが、これはあまり「Androidy」とは感じられないため、上記の機能 (actionBar のリロード ボタンを押したときにフラグメントを更新する) に置き換えたいと考えています。ちなみに、プルツーリフレッシュ機能は正常に機能しました。Reloadableインターフェイスからリロード機能を新しい機能に再マップしました。

今、リロード ボタンをテストしていて、アプリがクラッシュします。

リロード ボタンを使用すると、TextView の 1 つが ivar にバインドされていないように見えるため、アプリがクラッシュします。ただし、プルツーリフレッシュを使用するとバインドされます。関連するコードは次のとおりです。

mTextView はnull、actionBar のリロード ボタンから呼び出された場合です。フラグメントの一部である pullToRefresh 機能を使用する場合、null ではありません。ここで何がうまくいかないのですか?

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

objective-c - ivar を関数に渡し、元のオブジェクトへの参照を失わずに設定する方法

ivar (NSMutableArray) をいくつかのメソッドに渡しています。関数内のオブジェクトを変更すると、関数の外に反映されると思っていましたが、この場合はオブジェクトを設定する必要があります。次のようなもの:

しかし、関数内のimAnIvarのメモリ参照は、設定すると変更されることに気付きました。それを考えると、実際の ivar は変更されません。問題は、メソッド内のオブジェクトの参照を変更しているため、ivar を指すのをやめ、他のランダムなメモリ方向を指すことであることを理解しています。

この問題の解決策の 1 つを考えました。関数を呼び出す前に ivar が nil でないことを確認し、次のようにすることができます。

そのため、直接設定するのではなく、元のオブジェクトを使用します。問題は、これが機能するためには、ivar が nil ではないことを確認する必要があることです。これは、メソッドへの呼び出しごとに次のようなことを行う必要があるため、きれいではないと思います。

私の質問は次のとおりです。ローカルスコープ変数を設定していても、元の変数を強制的に指すようにする方法はありますか? そうでない場合、これを機能させるためのよりクリーンな方法はありますか?

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

objective-c - ivar とプロパティを同じ名前で宣言する必要があるのはなぜですか?

Xcode 4.4 より前のほとんどのプロジェクトでは、開発者が ivar と同じ名前のプロパティを同時に宣言していることに気付きました。例

だから私はなぜわからないのですか?

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

objective-c - ARCでは、ランタイムメソッドを使用してオブジェクトタイプのivarに割り当てることは合法/安全ですか?

ここで説明する手法に基づいて、ivar_getOffset()メソッドを使用してオブジェクトインスタンスにivarを設定しています。

これで、ivarがNSString*の場合があります。

アップデート:

私は間違った方向に進んでいました(この場合はivar_getOffsetを使用できません)。次を使用する必要があります。

オブジェクト値をivarに割り当てます。

私の質問は残っています:これはARCの下で安全に行うことができますか?ivarの既存のオブジェクトはARCによって適切に解放されますか?

割り当て前にivarが設定されていた文字列がARCによって適切に解放されない可能性があるのではないかと心配しています。私はそれを疑っていますが、そうでなければ、コンパイラはobject_setInstanceVariable(「自動参照カウントモードでは使用できません」)の場合のように私を許可しませんでした-そうですか?

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

iphone - MobileSubstrate: オブジェクトをグローバルにアクセス可能にする方法

現在、substrate.h を使用して MobileSubstrate 拡張に取り組んでおり、すべてのバンドルからアクセスできるオブジェクトが必要です。

私が知る限り (そして私が試した限り)、staticコード内に変数を配置しただけでは、現在挿入されているバンドル (SpringBoard や任意のアプリなど) 全体でのみオブジェクトにアクセスできるようになります。

だから、すべてのアプリ (バンドル) から同じオブジェクトにアクセスできるようにするための最良の方法は何だろうか?

クラスにインスタンス変数を追加するというアイデアがありましたSpringBoardが、明らかにclass_addIvar()既存のクラスを呼び出すことはできません。

どんな助けでも大歓迎です。

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

objective-c - ivar レイアウト文字列形式

クラスの ivar レイアウトは、class_ro_tの構造体uint8_t配列フィールドとして定義されます ( http://opensource.apple.com/source/objc4/objc4-532.2/runtime/objc-runtime-new.hをご覧ください)。では、どう解釈すればよいのでしょうか。そこに保存されているデータの形式は何ですか?

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

objective-c - 他のクラスでivarを受け取る

2つのViewControllerがあります。1つBSViewControllerはソースのivarnumberarrayを 含み、もう1つBSotherViewControllerはターゲットとしてivarを受け取る必要があります。(BSViewControllerセグエのボタンがありますBSotherViewController。)

の2つのivarの値にアクセスするにはどうすればよいBSotherViewControllerですか?

BSViewController.h

BSViewController.m

BSotherViewController.h

BSotherViewController.m

以下の問題はaview.number、25ではなく0であるということです。そしてaview.arraynullです。

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

objective-c - ivar を init に入れる

BSViewControllerソース ivarsnumberarrayを含むビュー コントローラとBSotherViewController、ターゲットとして ivars を受け取る必要があるビュー コントローラがあります。この質問では、目的の結果を生成する1つの方法が提供されました。提案は、ここに示すように指定されたをオーバーライドするself.numberとの値を計算することでした。self.arrayinitinit

self.numberしかし、この解決策がどのようにして元のメソッドの、または元のメソッド内での計算を可能にするのかわかりませんself.array( viewDidLoad)。viewDidLoad私が試したアプローチでは、2 つの値に対して 0 と null しか取得できません。

さらに、次の行viewは、未使用の変数であるという警告の問題を生成します。

そのため、最初にivarnumberを計算してarrayから実行するアプローチを探しているinit(WithNumber)ので、同じ変数をターゲットクラスで使用できますBSotherViewController

より直接的なアプローチは useinitではなく、次のようなものを使用することだと思いましinitWithNumberたが、アンダースコアを使用するためのすべての ARC 要件と、objective-c の私の限られた理解でそれを機能させることはできないようです。

完全を期すために、前の質問の回答で生成されたコードのほとんどを以下に再現します。

BSViewController.h

BSViewController.m

BSotherViewController.h

BSotherViewController.m