問題タブ [declared-property]

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 投票する
3 に答える
283 参照

delegates - Xcode iPhone SDK (5.x) - AppDelegate 内の NSString へのアクセス

内にあるNSStringfromにアクセスしたい。AppDelegate.mViewController.m

私はSingle View Applicationを持っNSStringています。applicationDidEnterBackground:AppDelegate.m

NSStringViewController.mにあり、 では宣言されていませんAppDelegate.m

私はそれを宣言してからAppDelegate.hアクセスしようとしましたViewController.m(そして逆に)。

ViewController.h:

AppDelegate.m:

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

objective-c - プロパティをオーバーライドするパターンはありますか?

Objective-C ランタイムは、宣言されたプロパティのリストを Class オブジェクトのメタデータとして保持します。メタデータには、プロパティ名、タイプ、および属性が含まれます。ランタイム ライブラリには、これらの情報を取得するための関数もいくつか用意されています。これは、宣言されたプロパティがアクセサー メソッド (getter/setter) のペア以上のものであることを意味します。私の最初の質問は、なぜ私たち (またはランタイム) がメタデータを必要とするのですか?

よく知られているように、宣言されたプロパティはサブクラスでオーバーライドできません (readwrite と readonly を除く)。しかし、私はそれが必要であることを保証するシナリオを持っています:

もちろん、コンパイラは上記のコードを通過させません。私の解決策は、宣言されたプロパティをアクセサー メソッドのペアに置き換えることです (読み取り専用の場合はゲッターのみ)。

プロパティstringは段階的に変更され、頻繁に変更される可能性があるため、変更可能である必要があります。同じセレクターを持つメソッドは同じ戻り値とパラメーターの型を共有する必要があるという制約を知っています。しかし、上記の解決策は意味的にも技術的にも適切だと思います。セマンティックな側面では、可変オブジェクト不変オブジェクトです。技術的な面では、コンパイラはすべてのオブジェクトをidとしてエンコードします。私の2番目の質問は、上記の解決策は理にかなっていますか? それとも単に奇妙ですか?

次のように、ハイブリッド アプローチを採用することもできます。

ただし、 のようなドット構文を使用してプロパティにアクセスするmyMutableObject.stringと、コンパイラは、アクセサ メソッドの戻り値の型が宣言されたプロパティの型と一致しないことを警告します。メッセージフォームとしてご利用いただいても構いません[myMutableObject string]。これは、宣言されたプロパティがアクセサー メソッドのペア以上のものであるという別の側面を示唆しています。つまり、ここでは望ましくありませんが、より静的な型チェックです。3 番目の質問は、サブクラスでオーバーライドする場合、宣言されたプロパティの代わりに getter/setter ペアを使用するのが一般的ですか?

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

objective-c - ARCのNSStringプロパティは強力である必要がありますか、それともコピーする必要がありますか?

ARCでコンパイルしない場合は、copyなどのデータ型のプロパティを使用することをお勧めしますNSStringcopyARCモードでの使用に関する適切なドキュメントが見つかりませんでした。誰かがARCに何が適用できるか教えてもらえますか?

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

objective-c - ウィーク ポインターを介したブロック内の ivar への代入

isFinishedインターフェイス ファイルに読み取り専用のプロパティがあります。

YESそして、保持サイクルを作成せずに、後である時点でブロックに設定したいself:

これが正しい方法かどうかはわかりません。このコードは漏れたり壊れたりしますか? それとも問題ありませんか? おそらく私が見落としていたより簡単な方法がありますか?

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

objective-c - プロパティにストロングまたはウィークを使用する場合

としてテーブル ビューがありIBOutlet、デフォルトで XCode はそのプロパティをstrongではなくに設定しますweak。「受信メモリ警告」メッセージが表示されることがあります。そこで、多くのプロパティを から に変更しようとしましstrongweakが、プロセスに影響はないようで、スムーズに動作します。コンセントを弱く設定する必要がありますか、それとも間違っていますか?

そして最も重要なことは、メソッドですべてのプロパティを設定する必要があるか、それともs のみを設定する必要があるかです。nilviewDidUnloadIBOutlet

0 投票する
3 に答える
846 参照

objective-c - 合成されたコードを保持しながら、合成されたゲッター/セッターにコードを追加する方法

たとえば、NSLog(@"Executed.")合成されたゲッターまたはセッターが呼び出されるたびに実行する必要があります。それを行うには2つの方法があります。

  1. おそらく合成されたもののように機能するスニペットをいくつか見つけてください。このスレッドはその助けになるかもしれません。
  2. KVOを使用する:作業を行うオブザーバーを追加します。

それらのすべては私にとって満足のいくきれいに見えません。だから、subj。

UPDAE:回答ありがとうございますが、直接オーバーライドすることは解決策ではありません。合成されたコードを失います。どこかから(アップルエンジニアがコードを提供するアップルフォーラムからでも)合成されたコードを「コピーアンドペースト」「正しく」する場合は、次のコンパイラリリース後に変更されていないことを確認する必要があります。

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

objective-c - Apple LLVM 4.0 の新しい「デフォルト合成」機能はどのように動作しますか?

Xcode 4.4 のリリース ノートを読んでいて、次のことに気付きました。

LLVM 4.0 コンパイラ

Xcode には、次の新しい Objective-C 言語機能を含む、Apple LLVM コンパイラ バージョン 4.0 が含まれるようになりました。

  • デフォルトの @synthesize: 実装されていない場合、@property を自動的に合成します

この機能に興味があります。それはどのように機能しますか?を削除してみましたが@synthesize、うまくいきません。

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

objective-c - コピーされた NSMutableString プロパティを使用しようとすると例外が発生する

プロパティがまたはNSMutableStringであるべきかどうかを調査するために、小さな Xcode プロジェクトを開始しました。私は自分のプロパティを属性で宣言しました:copyretaincopy

次に、次のように初期化しましたself.stringA = [NSMutableString new];

最後に文字列を設定しようとしました[stringA setString:@"A"];

ただし、プログラムは、

「キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'setString で不変オブジェクトを変更しようとしています:'」

NSString結果の文字列が これは、属性NSMutableStringを使用してプロパティを宣言し、を使用してプロパティを宣言する必要があるということですか?retainNSStringcopy

0 投票する
0 に答える
34 参照

objective-c - ivarsスコープについての簡単な問い合わせ

重複の可能性:
@syntheized インスタンス変数の可視性は?

これらの ivarのスコープ ( @private、など) は何ですか?@protected

-@property/@synthesize

-宣言された.h

-宣言された.m

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

objective-c - セッターが一方のプロパティに対して呼び出され、もう一方のプロパティに対して呼び出されないのはなぜですか?

このコードは Big Nerd Ranch iOS Programming book から引用しました。コードでは、2 つのインスタンス変数coordinatetitle. なぜcoordinate直接割り当てられtitle、セッターを呼び出すことによって設定されるのですか?

ヘッダー ファイル

実装ファイル