objective-c - 用单个对象替换多个数组内容?

标签 objective-c cocoa-touch cocoa nsmutablearray

我有一个 NSMutableArray,其中的内容我想用 NSNull 对象替换。

这就是我所做的:

NSMutableArray* nulls = [NSMutableArray array];

for (NSInteger i = 0; i < myIndexes.count; i++)
    [nulls addObject:[NSNull null]];

[stageMap replaceObjectsAtIndexes:myIndexes withObjects:nulls];

我怎样才能更有效地做到这一点? 有没有办法枚举一个 NSIndexSet,这样我就可以将数组内容一一替换?

已解决

事实证明,建议的方法速度提高了 2 倍(平均 0.000565 秒 vs 0.001210 秒):

if (myIndex.count > 0)
{
    NSInteger index = [myIndex firstIndex];

    for (NSInteger i = 0; i < myIndex.count; i++)
    {
        [stageMap replaceObjectAtIndex:index withObject:[NSNull null]];
        index = [myIndex indexGreaterThanIndex:index];
    }
}

最佳答案

您可以使用for循环。从第一个索引开始,使用 indexGreaterThanIndex: 获取下一个索引,并在到达最后一个索引后停止。

不要忘记考虑空索引集。在这种情况下,第一个和最后一个索引都将为 NSNotFound。最简单的方法是测试索引集的计数;如果为零,则不循环。

另外,Jason Coco 关于分析的说法。在您的程序正常运行之前,不要太担心效率,并且在运行 Shark(或 Instruments,如果您喜欢的话)并准确找到缓慢的地方之前,不要去优化。

关于objective-c - 用单个对象替换多个数组内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/741367/

相关文章:

objective-c - 获取最前面应用程序当前选中的文本

ios - 如何以编程方式删除 plist?

ios - Iphone 模拟器屏幕键盘问题

cocoa-touch - 来自 UIImage 的数据 URL/PNG

ios - 来自 Objective-C 的可选协议(protocol)不是应该在 Swift 中完成的事情吗?

iphone - NSURLConnection 委托(delegate)方法未被调用

objective-c - maskToBounds :YES affecting scroll performance

objective-c - 如何使大纲 View 中的文本单元格显示父行有多少个子行?

ios - 在 objective-c 中访问类方法。使用 self 或类名?

cocoa-touch - 有没有在 cocoa 中渲染图像的最佳方法?我正在使用 setNeedsDisplay