2

私が書く辞書を使用して、文字列をキーの値として保持するアイテムが必要だとします。

[NSDictionary dictionaryWithObject:@"someString" forKey:@"stringKey"];

辞書なしでこれを行う方法を尋ねています(あいまいです、プログラマーはキーを知る必要があります)またはオブジェクト(この薄いオブジェクトのやり過ぎ、メソッドは必要ありません)、構造体の行でさらに何か、以前に構造体を試しました、しかし、構造体アイテムとして使用するiOSの構造体を見たことがcharsないので、これが正しい方法かどうかはわかりません。結果は次のようになります。

replacement.key = value;

何かご意見は?

4

4 に答える 4

2

非常に特殊な問題がない限り、小さなデータオブジェクトが過剰になることはめったにありません。たとえば、これらのオブジェクトが何千もある場合、特にそれらをすばやく作成して破棄する必要があり、アプリのプロファイルを作成してオブジェクト自体が実際の問題であることがわかった場合は、単純なデータオブジェクトを使用しないことを検討する必要があります。ただし、一般的なケースでは、単純なデータオブジェクトを使用する必要があります。

于 2012-07-31T14:54:51.063 に答える
1

@propertyとを備えた薄いオブジェクトは、@synthesizeメソッドを作成する手間を省きます。すべてのインスタンス変数は、コードなしで作成および変更されます。

このようなオブジェクト定義は、ほとんど構造体より大きくならず、 のサブクラスであるため、サブクラスNSObjectのみを受け入れる任意の配列またはその他のフレームワーク コンテナーに配置できますNSObject。構造体でそれを行うことはできません。

XCode 4.4 (Mac 開発用) または 4.5 (iOS 用) を使用している場合は、ドロップ@synthesizeして@property.

パフォーマンスが非常に厳しく、階層から離れる必要がある場合にのみ、NSObjectそれを削除して C 構造体を使用することを検討する必要があります。

于 2012-07-31T15:03:16.280 に答える
1

それがあなたが望むものかどうかはわかりませんが、次を使用できますstruct

 typedef struct {
    __unsafe_unretained NSString* key;
   ...
 } foo;

 foo bar;
 NSString* foobar = @"Hello";
 bar.key = foobar;

注意: ARC がこの値を破棄しない理由はありません。ただし、値への強い参照がある場合は、それを使用できます。

于 2012-07-31T14:50:42.513 に答える
0

ディクショナリを使用するだけでなく、キーとして機能する一連の NSString 定数を作成しないのはなぜですか? そうすれば、あいまいさが少なくなります。

たとえば、NSError の userInfo 辞書からローカライズされた文字列を取得するために使用される Apple のキー定数を考えてみましょうNSLocalizedDescriptionKey他の多くのキーも、情報の特定の部分を取得するために使用されます。これらのキーは定数であるため、Xcode で簡単に使用できます (オートコンプリート)。文字列定数を使用して NSDictionary から値を取得する別の例は、NSFileManagerです。

さらに、オブジェクトを使用するだけでも問題ありません。ほとんどの場合、「オーバーヘッド」は無視できるはずです。ユーザーが気付くようなものではないことは確かです。少なくとも、非常に遠い将来に発生する可能性のある状況に備えて、コードを時期尚早に最適化しようとしないでください...

于 2012-07-31T15:03:25.200 に答える