1
// NSArray *arr = [NSArray arrayWithObjects:@"111",@"222",@"333", nil];
// NSString *str111 = @"111"; //内存地址1
// NSString *str222 = [NSString stringWithFormat:@"111"]; //内存地址2与1不同
// NSString *str333 = [NSString stringWithFormat:@"111"]; //内存地址3与1、2不同
//
// if ([arr containsObject:str111]) {
// NSLog(@"--11"); //输出
// }
// if ([arr containsObject:str222]) {
// NSLog(@"--22"); //输出
// }
// if ([arr containsObject:str333]) {
// NSLog(@"--33"); //输出
// }
// if([str111 isEqual:str222]){
// NSLog(@"--11"); //输出
// }
//
//
// 说明:不同方式创建的NSString 内存地址不同,但可完全作为同一NSString 对待
//
// //======================================================================
// NSArray *arr = [NSArray arrayWithObjects:[NSNumber numberWithInteger:100],
// [NSNumber numberWithInteger:200],
// [NSNumber numberWithInteger:300], nil];
//
// NSNumber *num1 = [NSNumber numberWithInteger:100]; //内存地址1
// NSNumber *num3 = [NSNumber numberWithInt:100]; //内存地址2与1不同
// if ([arr containsObject:num1]) {
// NSLog(@"--11"); //输出
// }
// if ([arr containsObject:num3]) {
// NSLog(@"--22"); //输出
// }
// 说明:同NSString
1
NSArray *arr = [NSArray arrayWithObjects:[[GoodsBaseModel alloc] init],[[GoodsBaseModel alloc] init],[[GoodsBaseModel alloc] init], nil];
GoodsBaseModel *model = [[GoodsBaseModel alloc] init];
GoodsBaseModel *model2 = [[GoodsBaseModel alloc] init];
NSMutableArray *arr2 = [arr mutableCopy];
[arr2 addObject:model];
if ([arr containsObject:model]) {
NSLog(@"--"); //不输出
}
if ([arr containsObject:model2]) {
NSLog(@"--"); //不输出
}
if ([[arr objectAtIndex:0] isEqual:[arr2 objectAtIndex:0]]) {
NSLog(@"--"); //输出
}
GoodsBaseModel *aa = [arr objectAtIndex:0];
aa.desc = @"修改";
GoodsBaseModel *aa2 = [arr2 objectAtIndex:0];
aa2.desc = @"修改2";
// 说明:mutableCopy只是做了可变copy,对象还是老对象
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
本文探讨了Objective-C中NSString和NSNumber对象的内存管理特性,分析了不同创建方式下对象的内存地址差异及其对等性。同时,通过实例展示了自定义对象在NSArray与NSMutableArray之间的传递与比较行为。
680

被折叠的 条评论
为什么被折叠?



