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"];
何が起きてる?