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

objective-c - Objective-cの列挙型を持つivarのデフォルト値

私はenumこのようなものを持っています:

次のようなインターフェイスでivarが宣言されたクラスがあります。

現在、myTypeIvarのデフォルト値はThingAです(ThingAは列挙型の0番目の位置にあるため)。 myTypeIvar ThingBのデフォルト値を作成するための最良の方法は何ですか?

1つの解決策は、列挙型定義を単純に並べ替えることです(ThingBを0番目の位置に配置します)。別の解決策は、メソッドにmyTypeIvarを設定するinitことです。ただし、initメソッドは存在しません(追加されたときに呼び出されることはありません)。

0 投票する
4 に答える
718 参照

objective-c - Objective-C:Xcodeは自動的に'= _property "を認識します:この@synthesizeは変数名を作成しましたか?

@propertyaと@synthesizeそれを宣言するときは、以下を使用することをお勧めします。

_myPropertyXcodeは、ソースコードでまだ使用されていなくても、ivar名をオートコンプリートすることに気づきました。

これは、ivar@synthesizeが自動的にデフォルトの名前を作成するため_myPropertyですか?それとも、Xcodeがこの一般的な規則をオートコンプリートでサポートしているからですか?

ありがとう。

編集:私はこれが良い習慣である理由を探していません。私はすでにそれらを知っており、しばらくの間この規則を使用しています。内部を理解したいので、これが規則を満たすためのハードコードされたオートコンプリートルールなのか、それとも標準のオートコンプリートなのか、そして実際にObjective-C仕様では、によって生成されたivar@synthesizeにフォーム_myProperty、したがって、ivarの舞台裏での生成後、オートコンプリートはその存在を認識します。ありがとう!

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

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 で ruby​​1.9.2p290 を実行しています。
  • スレッドやファイバーは使用していません (修正: アプリ自体は使用していませんが、統計を収集/投稿するためのバックグラウンド スレッドを持つ NewRelic を使用しています)。
  • .haml ビューと .erb ビューが混在していますが、.haml からしか発生していません。(ただし、.erbs はあまりありません)
  • これがコントローラーコードで発生するのを見たことがありません
  • Bar.foomethod を決して呼び出さないという事実を知っているのに、「Bar のメソッド 'foomethod' が未定義です」に関するエラーをときどき見ました。これは、Bar オブジェクトが Foo ivar を自発的に置き換えた上記のバグに関連している可能性があります。

私はこれを追跡することにかなり困惑しています。何か提案はありますか、または似たような音を見た人はいますか?

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

objective-c - ARC 時代の財産とイヴァル

strong変数の設定はデフォルトで修飾子になるため、ivar を設定すると、割り当てられているオブジェクトが保持されるようになったと理解しています。ivar は、宣言されてstrongいるオブジェクトのスコープ内にあり、オブジェクトを変数のスコープ内に保持するため、ivar を含むオブジェクトがまだ生きている間、ivars 値が解放されることはありません。

これは正しいです?

もしそうなら、メモリ管理の観点から、保持(強力な)プロパティと単純な ivar の間に違いはもうないと私は考えていますか?

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

objective-c - 親オブジェクトの割り当てが解除された後、ivar の解放を遅らせる

クラス MotionStreak の ivar を持つクラス TouchInfo があります。

このクラスは、基本的にタッチ イベントを処理し、タッチに続くモーション ストリークを描画します。ユーザーが指を離したときに特定のタッチに関連付けられている のインスタンスを解放しTouchInfoたいのですが、モーション ストリークがフェードアウトする前に 0.5 ~ 1.0 秒間残りたいので、クラスのメソッドでstreakivar を解放できません。 .deallocTouchInfo

streak次のようにカスタムタイマークラスを使用して、タイマーを使用して ivarのリリースを遅らせています。

これまでのところ、クラッシュすることなく動作しています。しかし、私はこれを間違ってやっているのだろうか、そしてそれを行うためのより良い、推奨される方法があるのだろうかと思っています. ご意見をお聞かせください。

p/s: ARC に関するアドバイスはありません。私はまだ手動参照カウントの魔法を自動解放していません:P

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

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 と非常によく似たことを問題なく行っています。何が欠けている可能性がありますか?なぜこれが私に解放されているのですか、それともそれが起こっているのですか?

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

objective-c - ivar には何が含まれていますか?

ヘッダー ファイルでは、ivar 構造体に次の 3 つのメンバーがあります。

名前、タイプ、およびオフセット。

name は変数の名前を格納するためのものだと思います。

Offset は、構造体の先頭からの距離をバイト単位で格納するためのものです。

この2つについて私が正しいかどうか教えてください。誰でも私に説明できますかタイプは何のためですか? パブリック、プライベート、または保護されているかどうかを示すデータ型またはスコープです。

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

objective-c - 特定の状況ではこのUIViewがサブビューとして追加されないのに、他の状況では追加されるのはなぜですか?

viewForRootVcUIViewサブクラスの宣言されたプロパティであるUIViewがありますNewView。初期化するのはNewViewの責任viewForRootVcですが、サブクラスNewViewSubClassがその背景色を設定します。これがすべて完了すると、ルートビューコントローラはそのビューにサブビューとしてRootVc追加します。viewForRootVc

しかし、これは機能しません。viewForRootVc実際には追加されません。

ただし、次の3つのいずれかを実行すると機能します(ARCを使用していることに注意してください)。

  1. viewForRootVcの背景色を設定するのではなく、で設定NewViewSubClassNewViewます。そして、のインスタンスを初期化するのではなく、NewViewSubClass単に。のインスタンスを初期化しますNewView
  2. で初期化するときviewForRootVcNewView、直接割り当てを使用するのではなく、セッター(つまり、self.viewForRootVc)を呼び出します。
  3. viewForRootVcのヘッダーファイルにivarとしてリストしますNewView

なぜこれら3つが必要なのかわかりません。

動作しないコードは次のとおりです:RootVc.m

NewView.h

NewView.m

NewViewSubClass.m

私が気づいたことの1つは、ivarとして指定する場合、の実装ファイルviewForRootVcを入れる必要がないことです。@synthesize viewForRootVc;NewViewSubClass

私は常に、宣言されたプロパティが次のことを効果的に達成することを理解していました。

  1. 他のオブジェクトがそれらにアクセスできるようにします。
  2. 必要に応じてセッターが呼び出されるようにします。
  3. retainARCを使用していない場合、プロパティ宣言で指定した場合、セッターを呼び出すとプロパティが自動的に保持されます。
  4. ARCでは、宣言されたプロパティに対してivarが自動的に生成されます。

しかし、明らかにこれ以上のものがあります。それがスコープの問題なのか、それとも上記の機能しないコードが2つの異なるバージョンを作成することになったのかはわかりません。1つはのメソッドviewForRootVcで指定された正しいフレームを持ち、もう1つは正しい背景色を持っています。のメソッドで指定されていますが、どちらにも正しいフレームと色の両方がありません。NewViewinitNewViewSubClassinit

誰かが宣言されたプロパティとivarsの意味を明確にし、セッターを呼び出して宣言されたプロパティを設定するか、値を直接割り当てることができることを強く望んでいます。

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

objective-c - Objective-C: iVar を @public または @synthesizing @properties にする? プロパティはいつ使用する必要がありますか?

クラスには、どこからでもアクセスできるようにしたいインスタンス変数がいくつかあります。そのようです:

->C++ で行うように、以下のような構文を使用してインスタンスからプロパティにアクセスできます。

外の世界からアクセスできるようにすることだけが必要な場合に備えて、プロパティを作成する必要someStringがありますか? インターフェイスに@propertyforを作成し、実装に for を作成して、ドット構文を使用してアクセスできるようにします。someString@synthesize