2010-12-26 19 views
2

私は今Objective-Cをしばらく使っています。これまでのところ、自分のクラスを正しく作成する必要はありませんでした。Objective-Cクラスの単純なプロパティ

私は、ヘッダーファイルに@property(a, b)宣言を付けることができる2つの引数と少し混同しています。 Interface Builderへのコンセントを作成するときは、通常は@property(nonatomic, retain)を実行しますが、これはどういう意味かわかりません。

[instance setName:@"Bla Bla Bla"];instance.name = @"[email protected]"のように、外部から設定される一連のプロパティを持つシンプルなクラスを作成していますが、むしろ最初のオプションです。

クラスでこの種のプロパティを宣言するにはどうすればよいですか?

ありがとうございました! はn00bishの質問には申し訳ありません

答えて

1

:-) @propertyパラメータには、あなたの財産の行動にヒントを与える:

非アトミックは、設定/(複数スレッドのアクセスにWRT)プロパティ値がアトミックではないなっていることを示しています

retainは、オブジェクトがプロパティによって保持されることを伝えます(つまり、受信者はオブジェクトの所有権を取得します)。オプションは「コピー」(オブジェクトは-copyを使用してコピーされますが、一般的にはNSStringなどの値オブジェクトに適しています)、「割り当て」(オブジェクトは保持されずにプロパティに割り当てられます。デリゲートまたはデータソースの選択)。これらの3つのオプションは、単純なCタイプのプロパティではなく、ObjCオブジェクトに対してのみ有効です。

詳細はhttp://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.htmlを参照してください。あなたのケースでは

、あなたはおそらく使用します:

@property(copy) NSString* name; 

または:

@property(nonatomic, copy) NSString* name; 

をあなたがアトミックであるプロパティのセッター/ゲッターを必要としない場合。

+0

「非原子的」は実際にプロパティが*アトミックではないことを伝えます。つまり、生成されたsetter/getterは '@synchronized'ブロックにラップされません。これは高速ですが、複数のスレッドを処理する場合には危険です。一般的に非構造的なのは、少なくともiOS上ではスピードのために行く方法です(つまり、本当にスレッド化に安全である必要がある場合を除きます)。 – jbrennan

+0

右...愚かなタイプミス。修正しました。 – Julien

関連する問題