問題タブ [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.
ios - 隠しプロパティとプライベート iVar の使用
この質問は、特に静的ライブラリ/フレームワークに焦点を当てています。つまり、他の人が最終的に触れるコードです。
私は iOS 6 がリリースされたときに iOS 開発を始めたので、プロパティにかなり精通しています。インターフェイス拡張で宣言された隠しプロパティを使用して、「プライベート」プロパティのすべての作業を行いました。readonly
これには、他の人に変更してほしくない公開プロパティでの使用やreadwrite
、インターフェイス拡張内での使用が含まれます。
重要なことは、これらの静的ライブラリ/フレームワークを使用している他の人が、許可しない場合はこれらのプロパティにアクセスしたり、読み取らせた場合にこれらのプロパティを書き込んだりしたくないということです。
理論的には、彼らが独自のインターフェース拡張を作成し、自分のreadonly
プロパティをreadwrite
自分で作成したり、隠しプロパティの名前を推測したりできることを、私はしばらく前から知っていました。
これを防ぎたい場合、ivar@private
を直接宣言したタグで ivar を使用する必要がありますか? この方法でそれを行うことの潜在的な失敗はありますか? それは実際に追加のセキュリティ手段を私に与えますか、それとも赤いニシンですか?
objective-c - カテゴリから ivar 値を設定する
などのクラスを持つ特定の API を使用しますClassA
。
ClassA
プロパティimportantProperty
ivar = _importantProperty
、セッター =を持っていますsetImportantProperty
私が必要とするのは、プロパティが変更されたときに実際にデバッグで処理し、このプロパティに設定されている値とスタックトレースを出力することです。
クラスが定義されているため、このクラスを継承してこのメソッドをオーバーライドすることはできません。
そのため、メソッドをオーバーライドするデバッグ カテゴリを作成しsetImportantProperty
、スタック トレースと値の変更を処理できるようになりましたが、このメソッドにより元のメソッドに到達できなくなり、ivar 値を変更できなくなります。この ivar を変更する方法はありますか?
これが私の方法です:
それで、質問は_importantProperty = newValue
私の方法でそのようなコードを実装する方法はありますか、それとも私の場合に使用する他の方法はありますか?
前もって感謝します!
objective-c - カテゴリがインスタンス変数を持つことができないのはなぜですか?
連想参照を使用して、カテゴリで ivar のような動作を呼び出すことができることを理解しています。しかし、カテゴリで新しい ivar を宣言できない理由は何ですか?
クラスのプライベート空間に侵入してしまうからでしょうか。それとも他に理由がありますか?はいの場合、カテゴリで ivar を宣言する機能を示す例をいただければ幸いです。
macos - プロパティ アクセスの EXC_BAD_ACCESS (OS X 10.8.5)
自動合成を使用しています@property
。メソッドでプロパティにアクセスすると、EXC_BAD_ACCESS
例外が発生します。私の実装ファイルからのコードの関連セクションは次のとおりです。
-startScanning:
メソッドの最初の行で例外がスローされます。スタック トレースをドリルダウンすると、CBCentralManager
の実装内から例外がスローされていることがわかります。
0x7fff96c6ed49: leaq -413178944(%rip), %rax ; CBCentralManager._delegate
侵入する-startScanning:
と、次のように表示されlldb
ます。
さらに、プロパティの代わりにインスタンス変数を参照すると-startScanning:
、すべて問題なく実行されます。ここで明らかな何かが欠けていますか?
編集:
価値のあることとして、これは OS X 10.9 では問題なく動作しますが、OS X 10.8.5 では動作しません。
objective-c - プロパティを保護されたものとして宣言するより良い方法
このブログ投稿に従って、直面していた問題を解決する方法を見つけました。
私の問題は、彼のように、サブクラスで継承およびアクセスする必要があるプロパティを持つクラスがあることでした。
解決策はこれでした:
私が疑問に思っているのは、プロパティを保護されていると宣言する別の方法があるかどうかということです?
ios - 変数値を別のビューに適切に渡す方法
MainView とMainInvoicingの 2 つのビューがあります
MainViewからint 型の変数値をMainInvoicingに送信しています
これは私のコードです
MainInvoicing.hファイルで int 型 var を宣言しました
ボタンをクリックしたMainView.mファイルで、MainInvoicing を次のように呼び出しています。
これから、私のMainInvoicingは完全に呼び出されますが、myChoiceはゼロ '0' に等しくなります。それは「1」でなければなりませんが
私はMainInvoicing.mでこの値を受け取っています
そして開始方法は
私はいつもデフォルトの部分にいます…。
どこが間違っているのか、または正しい値を取得するための提案があれば…助けてください…