問題タブ [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 投票する
2 に答える
299 参照

ios - 隠しプロパティとプライベート iVar の使用

この質問は、特に静的ライブラリ/フレームワークに焦点を当てています。つまり、他の人が最終的に触れるコードです。

私は iOS 6 がリリースされたときに iOS 開発を始めたので、プロパティにかなり精通しています。インターフェイス拡張で宣言された隠しプロパティを使用して、「プライベート」プロパティのすべての作業を行いました。readonlyこれには、他の人に変更してほしくない公開プロパティでの使用やreadwrite、インターフェイス拡張内での使用が含まれます。

重要なことは、これらの静的ライブラリ/フレームワークを使用している他の人が、許可しない場合はこれらのプロパティにアクセスしたり、読み取らせた場合にこれらのプロパティを書き込んだりしたくないということです

理論的には、彼らが独自のインターフェース拡張を作成し、自分のreadonlyプロパティをreadwrite自分で作成したり、隠しプロパティの名前を推測したりできることを、私はしばらく前から知っていました。

これを防ぎたい場合、ivar@privateを直接宣言したタグで ivar を使用する必要がありますか? この方法でそれを行うことの潜在的な失敗はありますか? それは実際に追加のセキュリティ手段を私に与えますか、それとも赤いニシンですか?

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

objective-c - カテゴリから ivar 値を設定する

などのクラスを持つ特定の API を使用しますClassA

ClassAプロパティimportantPropertyivar = _importantProperty、セッター =を持っていますsetImportantProperty

私が必要とするのは、プロパティが変更されたときに実際にデバッグで処理し、このプロパティに設定されている値とスタックトレースを出力することです。

クラスが定義されているため、このクラスを継承してこのメ​​ソッドをオーバーライドすることはできません。

そのため、メソッドをオーバーライドするデバッグ カテゴリを作成しsetImportantProperty、スタック トレースと値の変更を処理できるようになりましたが、このメソッドにより元のメソッドに到達できなくなり、ivar 値を変更できなくなります。この ivar を変更する方法はありますか?

これが私の方法です:

それで、質問は_importantProperty = newValue私の方法でそのようなコードを実装する方法はありますか、それとも私の場合に使用する他の方法はありますか?

前もって感謝します!

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

objective-c - カテゴリがインスタンス変数を持つことができないのはなぜですか?

連想参照を使用して、カテゴリで ivar のような動作を呼び出すことができることを理解しています。しかし、カテゴリで新しい ivar を宣言できない理由は何ですか?

クラスのプライベート空間に侵入してしまうからでしょうか。それとも他に理由がありますか?はいの場合、カテゴリで ivar を宣言する機能を示す例をいただければ幸いです。

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

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 では動作しません。

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

objective-c - プロパティを保護されたものとして宣言するより良い方法

このブログ投稿に従って、直面していた問題を解決する方法を見つけました。

私の問題は、彼のように、サブクラスで継承およびアクセスする必要があるプロパティを持つクラスがあることでした。

解決策はこれでした:

私が疑問に思っているのは、プロパティを保護されていると宣言する別の方法があるかどうかということです?

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

ios - 変数値を別のビューに適切に渡す方法

MainViewMainInvoicingの 2 つのビューがあります

MainViewからint 型の変数値をMainInvoicingに送信しています

これは私のコードです

MainInvoicing.hファイルで int 型 var を宣言しました

ボタンをクリックしたMainView.mファイルで、MainInvoicing を次のように呼び出しています。

これから、私のMainInvoicingは完全に呼び出されますが、myChoiceはゼロ '0' に等しくなります。それは「1」でなければなりませんが

私はMainInvoicing.mでこの値を受け取っています

そして開始方法は

私はいつもデフォルトの部分にいます…。

どこが間違っているのか、または正しい値を取得するための提案があれば…助けてください…