【问题标题】:NSMutableArray of NSMutableArrays, addObject problemNSMutableArrays的NSMutableArray,addObject问题
【发布时间】:2011-10-25 22:41:03
【问题描述】:

我对 Objective-C 比较陌生,我在使用 2D NSMutableArray 时遇到了问题,这是将一个 NSMutableArray 的内容添加到另一个 NSMutableArray 时的行为。

我有一个包含 NSMutableArray 的单例类。该数组用于存储 NSURL 值。 在我的程序中的某个时刻,我需要将这个 NSMutableArray 作为一个整体添加到另一个 NSMutableArray。

我做这样的事情: [arrayIWantStuffIn addObject: mySingleton.singletonMutableArray];

我遇到的问题是我需要重置我的 singltonMutableArray 以开始存储一组新的 NSURL 值。上面的 addObject 函数似乎是按引用传递而不是按值传递,所以当我这样做时:

[mySingleton.singletonMutableArray removeAllObjects];

arrayIWantStuffIn 中存储的数据也会被擦除。

如何实现一个“深度”addObject,它通过值而不是引用将 NSMutableArray 添加到另一个 NSMutableArray?

【问题讨论】:

    标签: objective-c ios singleton nsmutablearray


    【解决方案1】:

    你实际上并不需要一个深拷贝,只是另一个 mutableCopy。只需执行以下操作即可完成此操作

    [arrayIWantStuffIn addObject: [[mySingleton.singletonMutableArray mutablCopy] autorelease]];
    

    一旦清除或更改了 singletonMutableArray,它就不会更改您在 arrayIWantStuffIn 中的项目,您仍然可以独立修改内容。

    【讨论】:

    • 这就像一个魅力。谢谢乔。只要确保我正确理解这一点,[mySingleton.singletonMutableArray mutableCopy] 会制作我的 singletonMutableArray 的深层副本,然后将该副本用作传递给 addObject 的对象?
    • 它不会对您的 singletonMutableArray 进行深层复制,因此 mutableCopy 在复制时仍会指向相同的 NSURL,但是当您对 singletonMutableArray 进行更改时不会改变你的arrayIWantStuffIn,反之亦然。此外,NSURL 是不可变的,因此您不必担心它们会发生变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多