CocoaにはCocoaBindingsとKVO(キー値監視)という機構があって、あるオブジェクトの値を変えると、それを自動追尾(笑)して、別なオブジェクトの状態が変わってくれるという仕組みがあります。
なら、自分の書いたコードでフラグが変わったり、アレイの中身を変えたら同時にGUIに反映されてくれるとか。
それだけではないのですが、そんな仕組みの一部をになってくれるのが、プロパティ(@property)です。 記述の際、少しキモチワルイのは、@propertyディレクティブは@interfaceディレクティブに続く{}の外に書くので、あれ?メンバー変数じゃないの?っていう気分になってしまいますが、メンバー変数とプロパティは似て異なる物と自分を納得させる事にしておきましょう。

具体的な使い方は、@interfaceディレクティブの中で、{}でメンバー変数を定義した後に

@property (属性名[,属性名]) 型名 変数名

と、いう風に定義します。
では、属性にはどんな属性があるのかというと

メモリー管理系(相互排他なので、どれか一つしか指定出来ない)
assign 単純代入による置き換え、以前のオブジェクトの明示的なリリースは行われない(っぽい)
retain 以前のオブジェクトの明示的なリリース後、代入し、retain
copy 以前のオブジェクトのリリース後、copyを代入
アクセッサ系
getter=method 参照にmethodを呼び出す
setter=method 代入にmethodを呼び出す
パーミッション系
readonly 参照のみであることを宣言、宣言しないとreadwrite
reawrite プロパティは読み書き可能
パフォーマンス系
nonatomic スレッドセーフを保証しない代わり、パフォーマンスが向上する可能性がある

このようになっています。
そして、プロパティっていう位ですから内部だけでなく、他のクラスやこのクラスのオブジェクトを生成したクラスからこの値にもアクセスしたいですよね。
そのためにアクセッサーメソッドを生成してくれるのが、@implementationディレクティブの中で記述する。

という2つのディレクティブです。 @synthesizeディレクティブは、このプロパティへのアクセッサーメソッドをコンパイラに自動生成しなさいとお願いするディレクティブで、アクセッサー名は先の@property宣言でgetter=,setter=属性で指定しない限り
と、なります。
.プロパティ名という記述方法はObjective-Cらしくないですが、Interface Builder等に指定する際に[レシーバー メッセージ]と書く訳にも行かないので、このような方法になったと思われます
ちょっと気をつけなければならないのは、setteの記述はプを赤字表示したように、setに続く一文字は大文字に変更しなければなりません。
ここにだけ気をつけると、あるプロパティへのアクセッサーをコンパイラが自動生成してくれ、アクセッサー経由で内容が変化したときは、その変数を元に必要な振る舞いを連動して行ってくれます。
便利ですよねぇ・・・