您的位置:首页 > 移动开发 > Objective-C

iOS之《Effective Objective-C 2.0》读书笔记(48)

2017-09-19 09:37 393 查看

第48条:多用块枚举,少用for循环

1.基本的for循环

NSArray *array = /*...*/;
for (int i = 0; i < anArray.count; i++)
{
id object = anArray[i];
//Do something with 'object'
}


2.NSEnumerator遍历法

正向遍历

NSArray *anArray = /* ... */;
NSEnumerator *enumerator = [anArray objectEnumerator];
id object;
while ((object = [enumerator nextObject]) != nil)
{
// Do something with 'object'
}


反向遍历

NSArray *anArray = /* ... */;
NSEnumerator *enumerator = [anArray reverseObjectEnumerator];
id object;
while ((object = [enumerator nextObject]) != nil)
{
// Do something with 'object'
}


3.快速遍历

NSArray *anArray = /* ... */;
for (id object in anArray)
{
// Do something with 'object'
}


4.块枚举法

这个块有三个参数,分别是当前迭代所针对的对象、所针对的下标,以及指向布尔值的指针。前两个参数的含义不言而喻。而通过第三个参数所提供的机制,开发者可以终止遍历操作

//1>NSArray
NSArray *anArray = /* ... */;
[anArray enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop)
{
// Do something with 'object'
if (shouldStop)
{
*stop = YES;
}
}];

//2>Dictionary
NSDictionary *aDictionary = /* ... */;
[aDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop)
{
// Do something with 'key' and 'object'
if (shouldStop)
{
*stop = YES;
}
}];
//3>Set
NSSet *aSet = /* ... */;
[aSet enumerateObjectsUsingBlock:^(id object, BOOL *stop)
{
// Do something with 'object'
if (shouldStop)
{
*stop = YES;
}
}];


 用此方式也可以执行反向遍历

- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)options
usingBlock:(void(^)(id obj, NSUInteger idx, BOOL *stop))block;

- (void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)options
usingBlock: (void(^)(id key, id obj, BOOL *stop))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息