問題タブ [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 - Objective-cの列挙型を持つivarのデフォルト値
私はenum
このようなものを持っています:
次のようなインターフェイスでivarが宣言されたクラスがあります。
現在、myTypeIvarのデフォルト値はThingAです(ThingAは列挙型の0番目の位置にあるため)。 myTypeIvar ThingBのデフォルト値を作成するための最良の方法は何ですか?
1つの解決策は、列挙型定義を単純に並べ替えることです(ThingBを0番目の位置に配置します)。別の解決策は、メソッドにmyTypeIvarを設定するinit
ことです。ただし、initメソッドは存在しません(追加されたときに呼び出されることはありません)。
objective-c - Objective-C:Xcodeは自動的に'= _property "を認識します:この@synthesizeは変数名を作成しましたか?
@property
aと@synthesize
それを宣言するときは、以下を使用することをお勧めします。
_myProperty
Xcodeは、ソースコードでまだ使用されていなくても、ivar名をオートコンプリートすることに気づきました。
これは、ivar@synthesize
が自動的にデフォルトの名前を作成するため_myProperty
ですか?それとも、Xcodeがこの一般的な規則をオートコンプリートでサポートしているからですか?
ありがとう。
編集:私はこれが良い習慣である理由を探していません。私はすでにそれらを知っており、しばらくの間この規則を使用しています。内部を理解したいので、これが規則を満たすためのハードコードされたオートコンプリートルールなのか、それとも標準のオートコンプリートなのか、そして実際にObjective-C仕様では、によって生成されたivar@synthesize
にフォーム_myProperty
、したがって、ivarの舞台裏での生成後、オートコンプリートはその存在を認識します。ありがとう!
ruby-on-rails - ruby 1.9で自然発火するRails view ivars
Rails 3 / ruby 1.9.2 webapp があります。時々 - 100000 分の 1 リクエストしかないかもしれません - 説明できないエラー レポートが表示されます。
正確なエラーはさまざまですが、ビュー内のインスタンス変数が突然 nil になるという行に沿っているようです。これの最も明確なインスタンスは最近発生しました。ヘルパー内のこのコードは -
- 「NoMethodError: nil:NilClass の未定義のメソッド `+'」が発生しました。ただし、エラーはこのケースに限定されないことに注意してください。これらの 2 行のコードは説明のみを目的としており、問題を「解決」するために回避できるものではありません。
エラーを再現することは基本的に不可能です。私は自分で見たことがなく、その結果としてのエラー レポートを見ただけです。REE から ruby 1.9.2 に切り替えたときに最初にエラーが発生したと思います。
関連する場合と関連しない場合があるその他の詳細:
- ユニコーンのフォークされたインスタンスを使用して、Solaris 10 で ruby1.9.2p290 を実行しています。
- スレッドやファイバーは使用していません (修正: アプリ自体は使用していませんが、統計を収集/投稿するためのバックグラウンド スレッドを持つ NewRelic を使用しています)。
- .haml ビューと .erb ビューが混在していますが、.haml からしか発生していません。(ただし、.erbs はあまりありません)
- これがコントローラーコードで発生するのを見たことがありません
- Bar.foomethod を決して呼び出さないという事実を知っているのに、「Bar のメソッド 'foomethod' が未定義です」に関するエラーをときどき見ました。これは、Bar オブジェクトが Foo ivar を自発的に置き換えた上記のバグに関連している可能性があります。
私はこれを追跡することにかなり困惑しています。何か提案はありますか、または似たような音を見た人はいますか?
objective-c - ARC 時代の財産とイヴァル
strong
変数の設定はデフォルトで修飾子になるため、ivar を設定すると、割り当てられているオブジェクトが保持されるようになったと理解しています。ivar は、宣言されてstrong
いるオブジェクトのスコープ内にあり、オブジェクトを変数のスコープ内に保持するため、ivar を含むオブジェクトがまだ生きている間、ivars 値が解放されることはありません。
これは正しいです?
もしそうなら、メモリ管理の観点から、保持(強力な)プロパティと単純な ivar の間に違いはもうないと私は考えていますか?
objective-c - 親オブジェクトの割り当てが解除された後、ivar の解放を遅らせる
クラス MotionStreak の ivar を持つクラス TouchInfo があります。
このクラスは、基本的にタッチ イベントを処理し、タッチに続くモーション ストリークを描画します。ユーザーが指を離したときに特定のタッチに関連付けられている のインスタンスを解放しTouchInfo
たいのですが、モーション ストリークがフェードアウトする前に 0.5 ~ 1.0 秒間残りたいので、クラスのメソッドでstreak
ivar を解放できません。 .dealloc
TouchInfo
streak
次のようにカスタムタイマークラスを使用して、タイマーを使用して ivarのリリースを遅らせています。
これまでのところ、クラッシュすることなく動作しています。しかし、私はこれを間違ってやっているのだろうか、そしてそれを行うためのより良い、推奨される方法があるのだろうかと思っています. ご意見をお聞かせください。
p/s: ARC に関するアドバイスはありません。私はまだ手動参照カウントの魔法を自動解放していません:P
objective-c - Objective-C での NSDictionary の謎のリリース?
Quartz Composer のカスタム パッチの仕上げに取り組んでいます。現時点では、パッチからほとんどすべてが削除されており、ivar である NSDictionary 値を NSLog にしようとするとクラッシュし、BAD ACCESS が表示され、最後に割り当てたときに完全に機能しました。
私のコードは次のようになります。
self.inputBoutData が入力されるまで、3 つの NSLog 行すべてが完全に機能することがログに示されていることがわかります。次に、ループの最後の NSLog 行で、self.inputBoutData が lastBoutData に正常にコピーされていることがわかります。
execute:atTime:withArguments: の次の実行では、self.inputBoutData はまだいっぱいですが、lastBoutData は再び空白です!!! どうやってそれが起こるのかわかりません。次に、最後のループと同様にもう 1 つのループを実行し、self.inputBoutData を lastBoutData に正常にコピーし、再度ログに記録します。次回は、2 番目の NSLog ステートメントの直前に BAD ACCESS を取得します。
lastBoutData が NSDictionary ではないというエラー メッセージが表示されたので、必死になって [lastBoutData 保持] を追加しましたが、クラッシュしませんでした。私はこの ivar をリリースしていないので、なぜそれを保持しなければならないのかわかりません。私は他の多くのパッチで他の ivar と非常によく似たことを問題なく行っています。何が欠けている可能性がありますか?なぜこれが私に解放されているのですか、それともそれが起こっているのですか?
objective-c - ivar には何が含まれていますか?
ヘッダー ファイルでは、ivar 構造体に次の 3 つのメンバーがあります。
名前、タイプ、およびオフセット。
name は変数の名前を格納するためのものだと思います。
Offset は、構造体の先頭からの距離をバイト単位で格納するためのものです。
この2つについて私が正しいかどうか教えてください。誰でも私に説明できますかタイプは何のためですか? パブリック、プライベート、または保護されているかどうかを示すデータ型またはスコープです。
objective-c - 特定の状況ではこのUIViewがサブビューとして追加されないのに、他の状況では追加されるのはなぜですか?
viewForRootVc
UIViewサブクラスの宣言されたプロパティであるUIViewがありますNewView
。初期化するのはNewView
の責任viewForRootVc
ですが、サブクラスNewViewSubClass
がその背景色を設定します。これがすべて完了すると、ルートビューコントローラはそのビューにサブビューとしてRootVc
追加します。viewForRootVc
しかし、これは機能しません。viewForRootVc
実際には追加されません。
ただし、次の3つのいずれかを実行すると機能します(ARCを使用していることに注意してください)。
viewForRootVc
の背景色を設定するのではなく、で設定NewViewSubClass
しNewView
ます。そして、のインスタンスを初期化するのではなく、NewViewSubClass
単に。のインスタンスを初期化しますNewView
。- で初期化するとき
viewForRootVc
はNewView
、直接割り当てを使用するのではなく、セッター(つまり、self.viewForRootVc)を呼び出します。 viewForRootVc
のヘッダーファイルにivarとしてリストしますNewView
。
なぜこれら3つが必要なのかわかりません。
動作しないコードは次のとおりです:RootVc.m
NewView.h
NewView.m
NewViewSubClass.m
私が気づいたことの1つは、ivarとして指定する場合、の実装ファイルviewForRootVc
を入れる必要がないことです。@synthesize viewForRootVc;
NewViewSubClass
私は常に、宣言されたプロパティが次のことを効果的に達成することを理解していました。
- 他のオブジェクトがそれらにアクセスできるようにします。
- 必要に応じてセッターが呼び出されるようにします。
retain
ARCを使用していない場合、プロパティ宣言で指定した場合、セッターを呼び出すとプロパティが自動的に保持されます。- ARCでは、宣言されたプロパティに対してivarが自動的に生成されます。
しかし、明らかにこれ以上のものがあります。それがスコープの問題なのか、それとも上記の機能しないコードが2つの異なるバージョンを作成することになったのかはわかりません。1つはのメソッドviewForRootVc
で指定された正しいフレームを持ち、もう1つは正しい背景色を持っています。のメソッドで指定されていますが、どちらにも正しいフレームと色の両方がありません。NewView
init
NewViewSubClass
init
誰かが宣言されたプロパティとivarsの意味を明確にし、セッターを呼び出して宣言されたプロパティを設定するか、値を直接割り当てることができることを強く望んでいます。
objective-c - Objective-C: iVar を @public または @synthesizing @properties にする? プロパティはいつ使用する必要がありますか?
クラスには、どこからでもアクセスできるようにしたいインスタンス変数がいくつかあります。そのようです:
->
C++ で行うように、以下のような構文を使用してインスタンスからプロパティにアクセスできます。
外の世界からアクセスできるようにすることだけが必要な場合に備えて、プロパティを作成する必要someString
がありますか? インターフェイスに@property
forを作成し、実装に for を作成して、ドット構文を使用してアクセスできるようにします。someString
@synthesize