2012年11月10日土曜日

[iOS][入門][初心者]データをメソッド間受け渡しあれこれ

初心者系第一回。
初心者の自分にとって、
クラス間は親子継承とかシングルトンとかデリゲートとかiCloudとかUserDefaultとかあるけど、メソッド間のデータ保持は基礎すぎてあまり書かれていないので覚書。

いろんなとこから摘んで書くよ!


<参考>http://d.hatena.ne.jp/glass-_-onion/20100723/1279891256
//プロパティをメソッドの戻り値代わりに使ってはいけない
メソッドが呼ばれるたびにプロパティを release して作り直すような場合、プロパティを使う必要がありません。プロパティに限らずインスタンス変数を使用する場合も同じです。
@interface Hoge : NSObject {
}
- (NSArray *)foo;
@end

@implementation Hoge
- (NSArray *)foo {
  : 何らかの処理
  return 処理結果;
}
@end

//プロパティをリターンしない
メソッドの戻り値にするのであればそもそもプロパティにする必要ないですね。
@interface Hoge : NSObject {
}
- (NSArray *)foo;
@end

@implementation Hoge
- (NSArray *)foo {
  : 何らかの処理
  return 処理結果;
}
@end

//インスタンス変数やプロパティをメソッドの引数に渡さない
クラス内でどこからでもアクセスできる変数を引数に渡してもあまり意味がありません。
方法1 引数を廃止する
@interface Hoge: NSObject {
  NSString *_title;
}
@property (copy) NSString *title;
- (void)foo;
- (void)bar;
@end

@implementation
@synthesize title = _title;
- (void)foo {
  NSMutableString *s = [NSMutableString stringWithString:@"Hello "];
  [s appendString:_title];
  : 何らかの処理
}
- (void)bar {
  _title = @"World";
  [self foo];
}
@end
方法2 インスタンス変数を廃止する
@interface Hoge: NSObject {
}
- (void)foo:(NSString *)title;
- (void)bar;
@end

@implementation
- (void)foo:(NSString *)title {
  NSMutableString *s = [NSMutableString stringWithString:@"Hello "];
  [s appendString:title];
  : 何らかの処理
}
- (void)bar {
  NSString *title = @"World";
  [self foo:title];
}
@end

//参照渡の引数をリターンしてはいけない
なんのために参照渡しているか全くわかりませんね。引数をリターンするのは論外です。(これよくしてた)
方法 引数の参照渡をやめる。
@interface Hoge : NSObject {
}
- (NSArray *)foo;
@end

@implementation Hoge
- (NSArray *)foo {
  : 何らかの処理
  return 処理結果;
}
@end
現時点ではこれくらいでお腹いっぱいだが、勉強になった。
第二回はNSStringまわりに。