以最节省内存的方式循环自定义对象的 NSMutableArray

Posted

技术标签:

【中文标题】以最节省内存的方式循环自定义对象的 NSMutableArray【英文标题】:Loop through NSMutableArray of custom objects in the most memory efficient way 【发布时间】:2010-12-12 19:30:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:
for (WhateverYourClassNameIs *whateverNameYouWant in yourArrayName) 
    [whateverNameYouWant performSelector];
    more code here;

它被称为快速枚举,是 Objective C 2.0 中的一项新功能,可在 iPhone 上使用。

【讨论】:

这是一种更好的内存管理方式,但我确实喜欢 Dave DeLong 关于谓词的帖子。【参考方案2】:

我可能只使用谓词,就像这样:

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 新手。你的代码看起来很小而且很棒,但我讨厌使用我不理解的东西。 阅读 filteredArrayUsingPredicateNSPredicate predicateWithFormat 的文档 感谢您的解释,这太棒了。在从编写游戏转向基于 Core Data 的工作之后,我才开始使用谓词,但我知道它们是如此强大。 @refulgentis - 一旦你掌握了谓词的窍门(这真是太棒了,顺便说一句),就可以尽情享受关键路径的乐趣。我最近才开始接触这些,它们非常有趣。 =D 代码干净整洁!但是,内存效率不高,因为它会创建一个包含所有过滤元素的新数组。

以上是关于以最节省内存的方式循环自定义对象的 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章

C 语言二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )

Python 3.6 异步函数以最简单的方式循环

在自定义对象的循环中循环一个 javascript 对象

C 语言二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )

自定义循环滑动的viewpager

单例模式的三种实现方式