あるクラスでインスタンス変数でNSArrayを定義して、そのクラスインスタンスからNSArrayの変数にアクセスしようとするとKILLされるということがあった。
何がだめかといったら、allocしてないのに、releaseしてしまったということ。

以下、ダメだったコード。
UIViewを継承したHogeクラス

@synthesize hogeArray;
-(id)initWithFrame:(CGRect) frame {
    if ((self = [super initWithFrame:frame])) {
    }
    NSMutableArray* array = [NSMutableArray array];//←allocしてないから保持カウント増えてない
    [array addObject:@"hoge"];
   self.hogeArray = array;
    [array release];//←これがダメ
}

Hogeクラスを呼ぶUIViewを継承したFooクラス。

@synthesize hogehoge;
-(void)awakeFromNib{
   Hoge* hoge = [[Hoge alloc] initWithFrame:CGRectMake(0,0,10,10)];
   self.hogehoge = hoge;
    [hoge release];
    NSLog(@"hoge.arary : %@",hoge.hogeArray);//ここでは参照できる
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     NSLog(@"hoge.arary : %@",hoge.hogeArray);//ここでは参照できない
}

書籍のサンプルコードを眺めていた感じは、ローカル変数を作ってから、インスタンス変数に代入という流れが多かった。
ローカル変数をallocして初期化したときは、すぐにreleaseしてあげる流れだけど、allocしないで初期化するような場合は注意が必要なのね。