【问题标题】:Replace an Array with an Array用数组替换数组
【发布时间】:2010-06-14 22:43:55
【问题描述】:

我有 NSMutableArray,我想用另一个替换它,但如果我尝试这样做......

firstArray = secondArray;

...然后它似乎擦除了整个 firstArray 并且我收到了这个错误消息..

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

...边界应该是 (6) 而不是 (0)。

有没有正确的替换数组的方法?

PS:我已经检查了 secondArray,它运行良好。

【问题讨论】:

    标签: objective-c cocoa cocoa-touch ipad nsmutablearray


    【解决方案1】:

    如果您想让firstArray 变量成为对第二个的引用,请执行以下操作:

    [firstArray release];
    firstArray = [secondArray retain];
    

    如果你想让firstArray 复制第二个,请执行以下操作:

    [firstArray release];
    firstArray = [secondArray mutableCopy];
    

    (在这两种情况下,release 都假定您已分配数组或之前已分配数组 retain-ed 或 copy-ed。如果没有,您可以跳过该位。无论哪种方式,您都拥有新数组并且必须在适当的时候release它。)

    如果你想用第二个数组的内容替换第一个数组的内容(这与复制并没有太大区别,但涉及更少的对象破坏和创建),那么我认为你会有做这样的事情:

    [firstArray removeAllObjects];
    [firstArray addObjectsFromArray:secondArray];
    

    【讨论】:

    • [secondArray copy] 将返回一个不可变的副本。
    【解决方案2】:

    您将 firstArray 指针分配给 secondArray 指针的指针,因此您丢失了对 firstArray 对象的引用,并且它被泄露了。如果要替换 firstArray 对象中的对象,请使用类似 -replaceObjectsInRange:withObjectsFromArray: 或仅使用 -release firstArray 对象并将 firstArray 分配给 [secondArray mutableCopy]

    我建议您阅读 C 指针以及 Objective-C 内存管理规则,以确保您牢牢掌握基础知识。

    【讨论】:

    • 我仍然遇到同样的错误。我什至尝试过... for (int place=0;place
    • 没关系,我解决了这个问题,但现在我有了一个新问题。我发布了一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2012-01-26
    • 2013-11-08
    • 2014-03-09
    • 2012-03-13
    相关资源
    最近更新 更多