2012-10-04 7 views
8

私はObjective C(2日後)にはとても新しいです。 @synthesizeについて読むと、それは私の理解と重複していると思われた@property(これは私が理解したと思っていた)...だから、いくつかの詳細は私の心の中でアイロンをかけなければならない...それは私を悩ませている。あなたは@interface@propertyを宣言すると、@propertyと@synthesize

を、あなたは、ユーザーがための標準的なゲッターとセッターを使うことを期待することができ、世界を言っている:

私は@property@synthesizeの違いについて間違っているなら、私を修正してくださいそのプロパティ。さらに、XCodeは一般的なゲッターとセッターをあなたのために作ります。 ...しかし、どの程度までは@property宣言で起こりますか? (IEそれはあなたの@interfaceでそれのための目に見えない宣言、そしてあなたの@interfaceでも、目に見えないコード?

- または -

よう@propertyは、あなたの中に目に見えないコードの宣言の世話をしてい...「完全に」を意味してい@interfaceのみ - ?@synthesizeがあなたの@implementationセクションに目に見えないコードの実装の世話をするのに対し)

+3

「@合成」が必要になる可能性があるよりも '@プロパティー 'がある場合は、このように考えてください。これは、一般的な 'getter'と' setter'が必要ですが、 '@ synthesize'が' getters'と 'setters'を実際に作成していることを' yes @ @ property'が伝えているからです。 'getters'と' setters'は生成されたものが好きなら非常に基本的です。 Paul Hegarty氏によるiTunesUの「iPadとiPhoneアプリケーション開発」の時計を持って、これが私の考え方であり、まだ失敗していない。 – Popeye

+0

ありがとうございますPopeye ... iTunesのUは素晴らしいです!私は実際にレッスン4またはPaulの2011シリーズにいます。私はちょうどバックアップしています、これらのシリーズの側面に沿ってXCode 4 Learning Objective Cを読んで...まだこれは明らかに私にはっきりしていませんでした。 – RichWalt

答えて

7

@propertyは、あなたが提供するものは何でもアトミックとセッターのセマンティクスを使用して、クラスのプロパティを宣言します。

Xcode 4.4では、あなたの財産からのバッキングivarが@synthesizeで宣言することなく提供されています。このivarの形式は_propertyNameで、プロパティ名はpropertyNameです。

+0

これは頭の爪を打ちました、短くて甘くてシンプルです。 +1 – Popeye

+0

はい...私はあなたがあなたのクラスに、特にゲッタとセッターと一緒に使用されるべき別のイヴァールを使って "あなたの財産を戻す"ことができたことを知っていました。 ..役に立つ返信のスピードに圧倒されました...(これは数分前に参加した後の私の最初の投稿です)! - このポストをアランにする時間をとってくれてありがとう! – RichWalt

16

まず、Xcodeの最新バージョンでは@synthesizeは必要ありません。あなたはそれを省略することができます。つまり、ここでは作品が何をしているのですか。

@propertyはアクセサの宣言です。それは単なる宣言です。

@property (nonatomic, readwrite, strong) NSString *something; 

- (NSString *)something; 
- (void)setSomething:(NSString)aSomething; 

主な違い@propertyを使用して、これらのメソッドを宣言すると、コンパイラが自動的にあなたのための実装を生成(合成)できることです:次間にはほとんど違いがあります。コンパイラにあなたのためにそれをさせる必要はありません。あなたは手でsomethingsetSomething:を実装することは絶対に自由です。これは一般的です。しかし、手作業で実装しなければ、コンパイラは_somethingという名前のivarを自動的に作成し、getterとsetterの合理的な実装を作成します。

Xcodeの古いバージョンでは、@synthesizeキーワードを使用して、自動生成を明示的に要求する必要がありました。しかしそれはもはや必要ではない。今日、@synthesizeを使用する唯一の理由は、ivarに非標準的な名前を付けることです(これは決して行いません)。

ここで重要なポイントは、somethingsetSomething:のメソッドであることです。彼らには魔法はありません。彼らは特別な "プロパティメソッドではありません。「彼らは、大会へのアクセス状態の一片によって状態のその部分は、多くの場合、IVARに保存されているだけの方法だが、する必要はありません

をさらに明確にするために:object.somethingない平均ん」 objectから_somethingという名前のIVARを返す。それがないものは何でも、[object something]の結果を返す」それは意味 『』それはIVARの値を返すことが一般的です。

あなたはあなたの状態のすべて(内部宣言する必要がありますし、外部)には、@property宣言を使用し、ivarsを直接宣言しないようにする必要があります。また、アクセサー(self.something)を使用してプロパティにアクセスする必要があります。 initおよびdeallocの方法。 initdeallocには、ivar(_something)を直接使用する必要があります。

+0

ロブ、お時間をいただきありがとうございます。昨年(2011年)からiTunes UでiOSの動画を見て、Xcodeで行われている変更に追いつこうとすると、時折混乱が生じます。インストラクターに丁寧に耳を傾け、簡単なコードでテストしても、Xcodeのドキュメントを読んでも@synthesisは必要ないとはっきりしませんでした!あなたのような有益な確認は、私が間違ったことを学んでいないという自信をさらに高めます。 :-)今、誰かがMVCについて正しく考え始めることができる外部リンクがあるとすれば、それは素晴らしいことでしょう! – RichWalt

+0

ここから開始:http://developer.apple.com/library/ios/#documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html%23//apple_ref/doc/uid/ TP40010810-CH14。次に、ここで:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457 –

+0

これを今見ています!感謝万円!!!! – RichWalt

関連する問題