可变对象与不可变对象
NSMutableString *mutaStr = [[NSMutableString alloc] initWithFormat:@"1"];
[mutaStr insertString:@"2" atIndex:0];
NSLog(@"mutaStr = %@", mutaStr); // mutaStr = 21
mutaStr = @"123";
[mutaStr insertString:@"4" atIndex:2]; // crash
mutaStr 声明的是一个可变类型,mutaStr = @"123";
将其指向了一个不可变的类型,由于 iOS 动态的特性,因此在编译时没问题;但是在运行时会 crash,因为 mutaStr 此时已经指向了一个不可变的对象
类似的还有 NSArray
NSMutableArray *mutaArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", nil];
[mutaArray addObject:@"3"];
mutaArray = @[@"4", @"5"];
[mutaArray addObject:@"5"]; // crash
网友评论