0

次のコード セグメントの解析の違いは何ですか。解析が速いのはどのコード セグメントですか?

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil];

NSMutableArray *data = (NSMutableArray *)arr;

(と)

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil];

NSMutableArray *data = [NSMutableArray arrayWithArray:arr];
4

2 に答える 2

3

両方のスニペットに同じ間違いがあります。オブジェクトにメモリを割り当ててから、データに何か他のものを割り当てます。これにより、前のものが失われます (そしてメモリ リークが発生します)。たとえば、次のようになります。

NSMutableArray *data = [[NSMutableArray alloc] init];
data = [NSMutableArray arrayWithArray:arr];

する必要があります

NSMutableArray *data = [NSMutableArray arrayWithArray:arr];

質問自体については次のとおりです。

  1. 最初のケースは悪い考えです。NSArray をキャストしますが、型を実際に変更せず、NSMutaleArray ポインターに割り当てただけなので、変更することはできません。

  2. 2 番目のケースでは、変更可能な新しい NSMutableArray が NSArray の内容で作成されます。これは素晴らしいことです。この配列を変更することができます。

于 2012-04-19T17:30:58.350 に答える
1

あなたが望むのは次のいずれかのようです:

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil];
NSMutableArray *data = [arr mutableCopy];

また:

NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"Apple",@"Macbook", nil];
于 2012-04-19T17:36:28.027 に答える