0

ARCが有効になっているObjective-cで次のことが合法ですか?

NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil];

あるべきだと思いました。ただし、この状況では、4行目にEXEC_BAD_ACCESSが表示されます。

NSMutableArray * bigArray = [[NSMutableArray alloc] init];
NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
[bigArray addObject: smallArray];
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil];

addObjectはポインタを正しくコピーしますか?それで、メモリの新しいセグメントをsmallArrayに割り当ててポイントする場合、それの何が問題になっていますか?

ただし、このコードセグメントはクラッシュしません。

NSMutableArray * bigArray = [[NSMutableArray alloc] init];
NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
[bigArray addObject: smallArray];
smallArray = [[NSMutableArray alloc] init];
[smallArray addObject:@"4"];
[smallArray addObject:@"5"];

何が起きてる?

4

2 に答える 2

2

これを試して:

smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil];

2番目のオブジェクトは、「5」だけでなく、@「5」でなければなりませ

于 2012-07-18T14:20:33.860 に答える
0

これは、文字列「5」の@を忘れたためだと思います。そのはず:

smallArray = [[NSMutableArray alloc] initWithObjects:@"4", @"5", nil];
于 2012-07-18T14:22:03.813 に答える