カプセル化とアクセサ

iPhoneアプリの開発でObjective-Cを利用している時,インスタンス変数の管理はどうしているだろうか。
例えば,

@interface file : NSObjet{
@public
   int width;
   int height;
   NSString *filename
}
@end

という風にすると変数に直接参照されて間違った変更などにより矛盾などが起きる可能性があったりする。
これらを起きない様にするためカプセル化する。interface内で,

@interface file : NSObjet{
@private
   int width;
   int height;
   NSString *filename
}
- (int) width;
- (int) height
- (NSString *) filename;
- (void) setFilename:(NSString *) newFilename
@end

とアクセサメソッドの宣言をして,implementation内で,

- (int) width{
   return width;
}
- (int) height{
   return height;
}
- (NSString *) filename{
   return filename;
}
- (void) setFilename:(NSString *) newfilename{
   filename = [NSString stringWithString: newFilename];
}

と定義する事で他のクラスからもアクセスできる様にすることができる。