2013-09-03

NSMutableArray のコピー

Objective-C で今日、ちょっとハマッたのでメモ。

NSMutableArray な変数をコピーする時は、copy メソッドは使えない。使えなくはないけど、NSArray が返ってくる。ので、insert とか add とか実行すると実行エラーになる。

で、どうするかというと、mutableCopy を使う。

NSMutableArray* foo = [NSMutableArray array];
(誤) NSMutableArray* bar1 = foo.copy;
(正) NSMutableArray* bar2 = [foo mutableCopy];

NSCopying

ぼくは、今回 NSCopying のコーディングでハマった。NSCopying については、他のサイトを参照してもらうことにして、ぼくが書いたコードはこんな感じ。

- (id)copyWithZone:(NSZone *)zone {
  MYClass* clone = [super copyWithZone:zone];
  clone.foo = [_foo mutableCopyWithZone:zone];
  return clone;
}

まったく、コピーした後で addObject が通らなくなるんだからびっくりしたよ。

No comments:

Post a Comment