問題タブ [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 - IBOutlets は ivar またはプロパティにする必要がありますか?
それらが存在することは確かですが、ViewControllerでアウトレットを宣言するための公式のベストプラクティスを見つけたり、特定したりするのは困難です。
私が見る限り、3つのオプションがあります:
- イヴァルのみ
- プロパティのみ
- Ivar で裏付けられたプロパティ
現在、IB から ViewController にドラッグしてプロパティを自動生成しようとすると、Xcode がクラッシュしますが、私が覚えている限りでは、そうすると ivar なしでプロパティが作成されます。ivar セクションにドラッグすることもできます。これにより、プロパティのない ivar が作成されます。これは、プロパティのみのアウトレットと ivar のみのアウトレットの両方が Apple で問題ないことを示唆しています。
したがって、viewDidUnload では、アウトレットのいずれかに nil を割り当てる必要がありますが、dealloc はどうでしょうか。ivar なしでプロパティを使用した場合、init または dealloc でアクセサーを使用することを想定していない場合、アウトレットを解放するにはどうすればよいでしょうか?
アクセサーなしでアウトレットを解放できる唯一のパターンは、ivar に裏打ちされたプロパティを使用することであるように私には思えます。そのため、アクセサーを使用せずに dealloc で ivar を手動で解放できますが、これは Apple の 1 つのオプションです。コード生成はサポートしていません。
getter - 目標 C: Getter メソッドと Class.ivarName
ファイル間で変数にアクセスする方法について、私はかなり混乱しています。
例えば:
Apple、Fruit、Eatの3つのファイルがあります
フルーツ.h
フルーツ.m
Apple.h
Apple.m
// 私の Eat.h は必要ないと思うので実質的に空です
Eat.m
これらは例としてゼロから書きました。したがって、セミコロンの欠落などのばかげた構文エラーや、私が見逃した明らかなエラーは無視してください。私はちょうど私が苦労しているものを反映しています。
私の混乱は、Apple.m では、ピリオド記号 (.) を使用して Fruit の名前 ivar にアクセスできることだと思います。しかし、Eat.m では、apple の名前 ivar に (.) でアクセスできません。getter メソッドを作成する必要がある/作成できることはわかっていますが、複数のファイルにまたがる方法で変数に直接アクセスする方法はありますか? おそらく悪いプログラミング手法であることは知っていますが(それが可能であれば)、なぜ機能が同じでないのか混乱しています。
objective-c - ARC では、ivar に直接割り当てられた場合、ブロックは自動的にコピーされますか?
ARC の下で次のコードを想定します。
質問: ivar に割り当てられると、ブロックは自動的にヒープにコピーされますか?
私の以前の質問は、 を介して割り当てられたときにコピーされることを暗示していました@property
。しかし、今日、私は上記のコードを使用し、にEXC_BAD_ACCESS
変更することで修正されたを受け取りました
_ivarResponseHandler = [responseHandler copy]
.
cocoa - 合成されたプロパティと ivar エラー
「デバッグ X86-64」モード (Xcode 3.6) でプログラムをビルドしてきましたが、すべて問題なく動作します。ただし、「Release X86-64」モードに切り替えようとしたところ、コンパイル時に各プロパティに対して次のエラーが発生しました。
ここで、'x' は私のプロパティの 1 つで、最初は 'company' です (このタイプのエラーを 51 件受け取りました)。私の .h インターフェイス ファイルでは、次のように項目をリストしました。
私の .M 実装ファイルでは、次のように合成しました。
私の理解では、インスタンス変数はこれらのプロパティに対して自動的に作成されます...実際、「リリース」モードでコンパイルしようとするまで、それらは完全に機能しているようです。
これを説明しなければならない本には何も見つかりませんでした。私は何か間違ったことをしていますか、より具体的には、「リリース」コンパイルのためにこれを修正するには何を含める必要がありますか?
ありがとう!
objective-c - ARCはObjective-Cのプロパティの必要性を排除しませんか?
重複の可能性:
ARCで@propertiesを使用する理由は何ですか?
NB:私は実際に私たちがプロパティを廃止できるとは思いませんが、私はなぜそうしないのかについての理由を理解しようとしています。:)
この質問に戻ると、プロパティを使用する主な理由は、メモリ管理の問題を回避するためのようです。つまり、プロパティを作成することで、これらすべての保持メソッドと解放メソッドを書き出す必要がなくなります。
ARCは現在これを処理しているので、プロパティをすべて一緒に廃止して、次のようなことでivarを設定することはできませんotherObject = anotherObject
か?
nsmanagedobject - NSManagedObject クラスのインスタンス変数はクラス変数のように機能しますか?
IOS 5 のみ、ARC あり。私のCore Dataモデルクラスでは:
「Venus」と「Mars」はMagicalRecordを使って作成しています。私のView Controllerでは、ラベルとボタンを使用して上記をテストしています。テストによると、私が火星を「訪問」すると、金星も訪問されるようになります。ivar VisitedByHumans を Core-Data 以外のプロパティに切り替えると、期待どおりに動作します。だから私はもう「立ち往生」していませんが、ivar のことを理解したいと思っています。
iphone - 目標 C: プロパティと ivar のどちらが変更されるか?
重複を心配していますが、他の投稿で理解できるものを見つけて答えることができないようです。質問する必要があります。
.h にある場合:
それから私の.mで
「changeButton」を押すと変更されるのは、合成されたプロパティですか、それともインスタンス変数ですか?
objective-c - ->演算子を使用してivarを設定したい
->演算子を使用してivarを設定したい。エラーが発生しました:インターフェイスタイプを静的に割り当てることができません。ドット演算子は必要ありません。
クラスViewController
objective-c - ウィーク ポインターを介したブロック内の ivar への代入
isFinished
インターフェイス ファイルに読み取り専用のプロパティがあります。
YES
そして、保持サイクルを作成せずに、後である時点でブロックに設定したいself
:
これが正しい方法かどうかはわかりません。このコードは漏れたり壊れたりしますか? それとも問題ありませんか? おそらく私が見落としていたより簡単な方法がありますか?
objective-c - Objectivecでivarsとプロパティを使用する理由
私はこのトピックに関する情報を見つけることができませんでした、そしてそれについて私が知っていることのほとんどは完全な偶然によるものです(そして私のコードが機能しなかった理由を理解しようと数時間試みました)。私が見つけたほとんどのチュートリアルは、objective-cを学びながら、同じ名前の変数とプロパティを作成します。プロパティがすべての作業を実行し、変数がそこにあるように見えるため、重要性がわかりません。例えば:
Test.h
Test.m
私が知っていること
1)さて、今日(何時間も混乱した後)、プロパティをどれだけ変更してhighscore = 5091231
も、[test highscore]を呼び出そうとしても、_highscoreの値が返されるため、何も変更されないことがわかりました。これは(私が思うに)test.hで設定されたivarです。したがって、test.mでの変数の変更はすべて、highscoreではなく_highscoreを変更する必要があります。(ここで間違っている場合は訂正してください)
2)正しく理解している場合(おそらく理解していない)、test.hに設定されているivarは実際のメモリを表しますが、@propertiesはそのメモリにアクセスするための単なる方法です。したがって、実装の外では、プロパティを経由せずに_highscoreにアクセスすることはできません。
わからないこと
基本的に、この状況について私が得られないのは、ivarを使用する必要があるかどうか、または@propertyと@synthesizeを使用できるかどうかです。ivarは、実際には何もしないが私を混乱させる余分なコードのようです。私が見た最近のツチのいくつかはivarを使用していないようですが、いくつかは使用しています。それで、これは単なるコーディングの好みですか、それとも実際に重要ですか?私はAppleのドキュメントを検索しようとしましたが、そこで迷子になり、探しているものが見つからないようです。どんなガイダンスでも大歓迎です。