将`NSMutableArray`的实例添加到`NSArray`对象中

时间:2015-07-29 09:38:23

标签: ios objective-c

我在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。它的大小灵活。 如何显示输出?

3 个答案:

答案 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包含相同的对象,但内容不同。