以最节省内存的方式遍历自定义对象的NSMutableArray

14
什么是遍历自定义对象NSMutableArray中最节省内存的方式? 我需要检查数组中每个对象的一个值,并返回该类型对象在数组中有多少个。
2个回答

36
for (WhateverYourClassNameIs *whateverNameYouWant in yourArrayName) {
    [whateverNameYouWant performSelector];
    more code here;
}

这被称为快速枚举,是Objective C 2.0的一个新特性,在iPhone上可用。


1
这是一种更好的内存管理方式,但我喜欢Dave DeLong关于谓词的文章。 - James P. Wright

17

我可能只会使用一个谓词,它的形式可能像这样:

NSArray * filtered = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"aProperty = %@", @"someValue"]];
NSLog(@"number of items where aProperty = someValue: %d", [filtered count]);

编辑:这段代码在功能上与以下代码等效:

NSMutableArray * filtered = [NSMutableArray array];
for (MyCustomObject * object in myArray) {
  if ([[object aProperty] isEqual:@"someValue"]) {
    [filtered addObject:object];
  }
}

你能给这段代码解释一下吗?我是一个iPhone新手和Obj-C新手。你的代码看起来很简洁,很棒,但我不喜欢使用自己不理解的东西。 - James P. Wright
1
阅读有关 filteredArrayUsingPredicateNSPredicate predicateWithFormat 的文档。 - mga
@refulgentis - 一旦你掌握了谓词(顺便说一下,它们真的很棒),就可以开始享受理解关键路径的乐趣了。最近我刚开始接触这些内容,它们非常有趣。=D - Dave DeLong
好的、干净的代码!然而,它不够内存高效,因为它创建了一个包含所有过滤元素的新数组。 - notnoop
@nall - 我不这么认为。我非常确定,你甚至可以运行像@"description CONTAINS NSObject"之类的东西。我相信它只是执行一个具有LHS名称的选择器并比较返回值。 - Dave DeLong
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接