今回、参考にしたSQLiteBooksのAppDelegate.hに限らず、Appleのサンプルソースは基本@property使い倒しなんで、一度、ちゃんと調べないといかんすね。

@property (nonatomic, retain) NSMutableArray *books;

とかな。

 関係ないけど

#import "Book.h"
#import "MasterViewController.h"

なんてせずに

@class Book, MasterViewController, ...

としてるのは「iPhoneアプリ開発、その(40)」でも書いたように依存度を減らすためです。ちゃんとAppleのサンプルもやってますな。

 で、本題。

@property (nonatomic, retain) NSMutableArray *books;

てのは「Objective-C 2.0プログラミング言語」の「プロパティの使用」で説明されてるとおり。

NSMutableArray *books;

に対してのアクセッサ(設定、所得メソッド)

- (NSMutableArray *)books;
- (void)setBooks:(NSMutableArray *)newBooks;

を宣言することと同じことだそうです。
 でもって実装ファイルAppDelegate.mの@implementation側で

@synthesize books;

とやることで

- (NSMutableArray *)books {
return books;
}

- (void)setBooks:(NSMutableArray *)newBooks {
books = newBooks;
}

を実装したことと同じになるんだとか。
 で、setBooksで「おいっ!」て思った人。そーです。これじゃbooksが自分が持ってる間中は存在するということが保証されません。
iPhoneアプリ開発、その(33)」を読んでる人は、当然そこはretainでしょう。となるわけですが...
 やっぱり@propertyでも

retain

の登場なわけです。これで、代入時にオブジェクトに対してretainを呼び出す必要があることを指定するので

- (void)setBooks:(NSMutableArray *)newBooks {
if (books != newBooks) {
[books release];
books = [newBooks retain];
}
}

といった実装に変わるみたいです。ただしreleaseまでは面倒見てくれないのでdeallocメソッドで

[books release];

てしてるわけですな。

 残りのnonatomicはちょっとややこしい。
 「Objective-C 2.0プログラミング言語」ではマネージドメモリ環境とガベージコレクト環境(ちなみに、ここでの環境はメモリ管理環境を指す)で扱いが違うって書いてます。

 nonatomicを指定しないと、マネージドメモリ環境ではオブジェクトプロパティの合成されたgetアクセサは、返された値の保持と自動解放を行います。

とか書いてる。う~ん

- (NSMutableArray *)books {
return [[books retain] autorelease];
}

てことですかね~?

return [[books retain] release];

ならまったく意味なしですが、まあ、ちょっと意味があるかも。nonatomic指定は、そういう保証をしなくていいよ、そのまま

return books;

ってやっちゃって~、という指定なのかな。あとスレッドも絡むみたいだけど、深くは追求しません。
 Bookの方のヘッダーファイルはというと

@property (assign, nonatomic, readonly) NSInteger primaryKey;

 なぜにintじゃなくNSInteger?
 謎。
 そのためにわざわざassignを記述しなくちゃならなくなってるし(本来assignは書かなくてもデフォルトなんだけど、NSCopyingプロトコルを採用してる変数つまりNSObject継承クラスは、これをやらないとコンパイラ警告が発生するみたい)。まあいいけど....
 readonlyはアクセッサの設定側メソッドを作らせない指定。

@property (copy, nonatomic) NSString *title;
@property (copy, nonatomic) NSDate *copyright;
@property (copy, nonatomic) NSString *author;

 title、copyright、authorについては自分が保有してるってことでcopy指定をしてるみたい。retainでもいいとは思うけど、まあ、こっちの方が独立性あるし、いいのではてとこですな。titleを例にするなら

-(void)setTitle:(NSString *)newTitle {
if (title != newTitle) {
[title release];
title = [newTitle copy];
}
}

 こんな感じか?

 以上、propertyをちょっと調べてみた~、でした。