相关疑难解决方法(0)

在NSNrray的NSNrray中找到最小和最大的值

什么是比较所有值的有效和伟大的方式NSArray,包含NSNumbersfloats找到的最大一个和最小的一个?

任何想法如何在Objective-C中做到这一点好看又快?

cocoa-touch objective-c nsarray ios

47
推荐指数
2
解决办法
3万
查看次数

Objective-C enumerateUsingBlock vs fast enumeration?

以下两种方法的优点和缺点是什么:

enumerateUsingBlock

NSArray *myArray = [NSArray new];
[myArray enumerateObjectsUsingBlock:^(id anObject, NSUInteger idx, BOOL *stop) {
    if (anObject == someOtherObject) {
        [anObject doSomething:idx];
        *stop = YES;
    }
}];
Run Code Online (Sandbox Code Playgroud)

快速列举

NSArray *myArray = [NSArray new];
int idx = 0
for (id anObject in myArray) {
    if (anObject == someOtherObject) {
        [anObject doSomething:idx];
        break;
    }
    ++idx;
}
Run Code Online (Sandbox Code Playgroud)

objective-c

35
推荐指数
1
解决办法
1万
查看次数

目标C - 枚举数组的最快和最有效的方法是什么?

编辑

我阅读了一些关于块和快速枚举以及GCD等的文章.@Bbum,他写了许多关于GCD和块主题的文章,他说块枚举方法总是比快速枚举方法快或快.你可以在这里阅读他的推理.

虽然这是一次引人入胜的智力对话,但我同意那些说它确实取决于手头任务的人.


我有一些任务需要完成,我需要快速,便宜,高效地完成这些任务.Apple为我们想要枚举数组的方式提供了很多选择,但我不确定选择哪个.

快速枚举

for (id obj in array)
{
    /* Do something with |obj|. */
}
Run Code Online (Sandbox Code Playgroud)

非并发块枚举

[array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {
    /* Do something with |obj|. */
}];
Run Code Online (Sandbox Code Playgroud)

并发块枚举

[array enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {
    /* Do something with |obj|. */
}];
Run Code Online (Sandbox Code Playgroud)

GCD申请

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_apply([array count], queue, ^(size_t idx) {
    id obj = [array objectAtIndex: idx];
    /* Do something with …
Run Code Online (Sandbox Code Playgroud)

arrays enumeration objective-c grand-central-dispatch objective-c-blocks

26
推荐指数
1
解决办法
7855
查看次数

Objective C:使用快速枚举时的最后一个对象?

在使用快速枚举时,知道何时到达数组中的最后一个对象的最佳方法是什么?有没有比增加int然后将其与数组长度进行比较更好的方法?

iphone for-loop objective-c fast-enumeration

6
推荐指数
1
解决办法
3953
查看次数

这是使用快速枚举的低效方法吗?

我并不完全理解枚举有多快的细节,但比较以下两种情况:

for(NSObject *object in self.myParent.parentsParents.granfathersMother.cousin.unclesNephew.array) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

NSArray *array = self.myParent.parentsParents.granfathersMother.cousin.unclesNephew.array;
for(NSObject *object in array) {
     // do something
 }
Run Code Online (Sandbox Code Playgroud)

在第一个例子中,它会在每次迭代时通过整个链来获得数组吗?我应该使用第二种方式吗?

objective-c fast-enumeration ios

4
推荐指数
1
解决办法
387
查看次数

enumerateObjectsUsingBlock:比for-in循环更快吗?为什么?

我正在阅读关于枚举NSHipster文章,该文章声称for-in循环比以下更快enumerateObjectsUsingBlock::

除非你在迭代时实际需要数字索引,否则使用for/in NSFastEnumeration循环几乎总是更快.

这个答案为该引用提供了一些反驳:

快速枚举需要从内部表示转换为快速枚举的表示.其中有开销.基于块的枚举允许集合类以最快遍历本机存储格式的速度枚举内容.

从内部表示转移到快速枚举的表示的翻译过程是什么?我知道那里有一些开销,但多少钱?

objective-c nsfastenumeration

1
推荐指数
1
解决办法
1997
查看次数