問題タブ [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.
objective-c - インスタンス変数オブジェクトにメモリを割り当てるための init メソッドのオーバーライド
init
オブジェクトを初期化すると ivar オブジェクトも初期化されるように、クラスのメソッドをオーバーライドしようとしています。
1) このコードは機能しますか? それでも、このソリューションは推奨されませんか?
2)if
条件がないのはなぜ==
ですか? 課題ですか?もしそうなら、なぜif
ですか?
これが明らかな場合は申し訳ありません!>_<
objective-c - __weakivarがniledされたときにアクションを実行したい
私はivar@class Foo
を含むを持っています。__weak id bar
異なるクラスのメソッドからのいくつかのアクションにより、オブジェクトが消えて、bar
ナイルになる可能性があります。
ivarがARCによって自動的に無効化されたときにアクションを実行したいと思います。
bar
可能であれば、プロパティに変換したり、Key-ValueObservingを使用したりすることは避けたいと思います。
これも可能ですか?そうでない場合、KVOはプロパティ以外のivarに対して使用できますか?
android - アクションバーボタンからフラグメントをリロードすると、ivar が null になるのはなぜですか?
3 つのタブを持つアプリがあります。各タブのフラグメントは、SectionsViewPager で作成されます。Reloadable
1 つのメソッドでインターフェイスを作成しましたvoid reload(Context ctx);
。actionBar にリロード ボタンを追加しました。ボタンが押されると、フラグメントが実装されているかどうかを確認し、実装されReloadable
ている場合は を呼び出しますreload(this);
。
ここまでは順調ですね...
アプリには以前にプルして更新する機能が含まれていましたが、これはあまり「Androidy」とは感じられないため、上記の機能 (actionBar のリロード ボタンを押したときにフラグメントを更新する) に置き換えたいと考えています。ちなみに、プルツーリフレッシュ機能は正常に機能しました。Reloadable
インターフェイスからリロード機能を新しい機能に再マップしました。
今、リロード ボタンをテストしていて、アプリがクラッシュします。
リロード ボタンを使用すると、TextView の 1 つが ivar にバインドされていないように見えるため、アプリがクラッシュします。ただし、プルツーリフレッシュを使用するとバインドされます。関連するコードは次のとおりです。
mTextView はnull
、actionBar のリロード ボタンから呼び出された場合です。フラグメントの一部である pullToRefresh 機能を使用する場合、null ではありません。ここで何がうまくいかないのですか?
objective-c - ivar を関数に渡し、元のオブジェクトへの参照を失わずに設定する方法
ivar (NSMutableArray) をいくつかのメソッドに渡しています。関数内のオブジェクトを変更すると、関数の外に反映されると思っていましたが、この場合はオブジェクトを設定する必要があります。次のようなもの:
しかし、関数内のimAnIvarのメモリ参照は、設定すると変更されることに気付きました。それを考えると、実際の ivar は変更されません。問題は、メソッド内のオブジェクトの参照を変更しているため、ivar を指すのをやめ、他のランダムなメモリ方向を指すことであることを理解しています。
この問題の解決策の 1 つを考えました。関数を呼び出す前に ivar が nil でないことを確認し、次のようにすることができます。
そのため、直接設定するのではなく、元のオブジェクトを使用します。問題は、これが機能するためには、ivar が nil ではないことを確認する必要があることです。これは、メソッドへの呼び出しごとに次のようなことを行う必要があるため、きれいではないと思います。
私の質問は次のとおりです。ローカルスコープ変数を設定していても、元の変数を強制的に指すようにする方法はありますか? そうでない場合、これを機能させるためのよりクリーンな方法はありますか?
objective-c - ivar とプロパティを同じ名前で宣言する必要があるのはなぜですか?
Xcode 4.4 より前のほとんどのプロジェクトでは、開発者が ivar と同じ名前のプロパティを同時に宣言していることに気付きました。例
だから私はなぜわからないのですか?
objective-c - ARCでは、ランタイムメソッドを使用してオブジェクトタイプのivarに割り当てることは合法/安全ですか?
ここで説明する手法に基づいて、ivar_getOffset()メソッドを使用してオブジェクトインスタンスにivarを設定しています。
これで、ivarがNSString*の場合があります。
アップデート:
私は間違った方向に進んでいました(この場合はivar_getOffsetを使用できません)。次を使用する必要があります。
オブジェクト値をivarに割り当てます。
私の質問は残っています:これはARCの下で安全に行うことができますか?ivarの既存のオブジェクトはARCによって適切に解放されますか?
割り当て前にivarが設定されていた文字列がARCによって適切に解放されない可能性があるのではないかと心配しています。私はそれを疑っていますが、そうでなければ、コンパイラはobject_setInstanceVariable(「自動参照カウントモードでは使用できません」)の場合のように私を許可しませんでした-そうですか?
iphone - MobileSubstrate: オブジェクトをグローバルにアクセス可能にする方法
現在、substrate.h を使用して MobileSubstrate 拡張に取り組んでおり、すべてのバンドルからアクセスできるオブジェクトが必要です。
私が知る限り (そして私が試した限り)、static
コード内に変数を配置しただけでは、現在挿入されているバンドル (SpringBoard や任意のアプリなど) 全体でのみオブジェクトにアクセスできるようになります。
だから、すべてのアプリ (バンドル) から同じオブジェクトにアクセスできるようにするための最良の方法は何だろうか?
クラスにインスタンス変数を追加するというアイデアがありましたSpringBoard
が、明らかにclass_addIvar()
既存のクラスを呼び出すことはできません。
どんな助けでも大歓迎です。
objective-c - ivar レイアウト文字列形式
クラスの ivar レイアウトは、class_ro_t
の構造体uint8_t
配列フィールドとして定義されます ( http://opensource.apple.com/source/objc4/objc4-532.2/runtime/objc-runtime-new.hをご覧ください)。では、どう解釈すればよいのでしょうか。そこに保存されているデータの形式は何ですか?
objective-c - 他のクラスでivarを受け取る
2つのViewControllerがあります。1つBSViewController
はソースのivarnumber
とarray
を 含み、もう1つBSotherViewController
はターゲットとしてivarを受け取る必要があります。(BSViewController
セグエのボタンがありますBSotherViewController
。)
の2つのivarの値にアクセスするにはどうすればよいBSotherViewController
ですか?
BSViewController.h
BSViewController.m
BSotherViewController.h
BSotherViewController.m
以下の問題はaview.number
、25ではなく0であるということです。そしてaview.array
nullです。
objective-c - ivar を init に入れる
BSViewController
ソース ivarsnumber
とarray
を含むビュー コントローラとBSotherViewController
、ターゲットとして ivars を受け取る必要があるビュー コントローラがあります。この質問では、目的の結果を生成する1つの方法が提供されました。提案は、ここに示すように指定されたをオーバーライドするself.number
との値を計算することでした。self.array
init
init
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