簡體   English   中英

將NSMutableArray的實例添加到NSArray對象中

[英]Adding a instance of `NSMutableArray` into `NSArray` objects

我在NSArray添加了NSMutableArray的實例。

碼:

    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大小將在初始化時固定。 但是我們正在傳遞NSMutableArray instance 。它的大小是靈活的。 這如何顯示輸出?

不, NSArray將保持固定(它是不可變的)並且不靈活。

這是因為您持有對對象的引用 ,並且引用的大小永遠不會改變,無論引用的對象有多大。

您已使用對象初始化了NSArray,因此該數組包含指向該對象的指針。

如果要使用可變數組的對象對其進行初始化,請使用“ initWithArray:”代替: https : //developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html

您的輸出僅顯示相同的內容:一個數組,其中只有一個對象:另一個具有3個Elements的數組:

簡而言之:

@[
    @[
         @"c++",
         @"c",
         @"wt",
     ]
]

您的NSArray是固定的。 它包含您的NSMutableArray,僅此而已; NSMutableArray無法刪除,則不能向NSArray添加其他任何內容,因此它將包含NSMutableArray,直到其生命周期結束為止。

這並不意味着您不能更改NSMutableArray。 它總是相同的數組,但內容不同。 那就是您的NSLog顯示的內容; NSArray包含相同的對象,但內容不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM