我在NSMutableArray
中添加NSArray
的实例。
代码:
NSMutableArray *var2=[[NSMutableArray alloc]init];
[var2 addObject:@"c++"];
NSArray *var1=[[NSArray alloc]initWithObjects:var2, nil];
[var2 addObject:@"c"];
[var2 addObject:@"wt"];
NSLog(@"Mutable%@",var2);
NSLog(@"Simple%@",var1);
输出:
2015-07-29 14:51:10.494 Kom4[3249:60b] Mutable(
"c++",
c,
wt
)
2015-07-29 14:51:10.496 Kom4[3249:60b] Simple(
(
"c++",
c,
wt
)
)
问题: NSArray
大小将在初始化时修复。但我们正在通过instance
NSMutableArray
。它的大小灵活。 如何显示输出?
答案 0 :(得分:1)
不,{{1}}将保持不变(它是不可变的)并且不灵活。
这是因为你持有一个引用到一个对象,并且引用永远不会改变大小,无论引用的对象有多大。
答案 1 :(得分:1)
您已使用对象初始化了NSArray,因此该数组包含指向该对象的指针。
如果要使用可变数组的对象初始化它,请使用“initWithArray:”代替: https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html
您的输出显示相同: 一个Array,它只有一个对象:另一个包含3个元素的数组:
简而言之:
@[
@[
@"c++",
@"c",
@"wt",
]
]
答案 2 :(得分:0)
您的NSArray已修复。它包含你的NSMutableArray,没有别的东西;无法删除NSMutableArray,没有其他任何东西可以添加到NSArray中,因此它将包含NSMutableArray,直到其生命周期结束时才会包含其他内容。
这并不意味着您无法更改NSMutableArray。它总是相同的数组,但内容不同。这就是你的NSLog所展示的内容; NSArray包含相同的对象,但内容不同。