这个迭代通过一个数组与这个展开的代码相同吗?

时间:2013-02-07 12:32:43

标签: objective-c automatic-ref-counting

我班上有一些@properties(强); NSArray*类型的苹果,香蕉和橘子;而且我想知道是否:

for(NSArray* __strong fruit in @[apples, bananas, oranges])     {
    fruit = [fruit sortedArrayUsingComparator:comparator];
}

与此相同:

apples  = [apples  sortedArrayUsingComparator:comparator];
bananas = [bananas sortedArrayUsingComparator:comparator];
oranges = [oranges sortedArrayUsingComparator:comparator];

comparatorNSComparator

我认为它们应该是相同的,但我不确定__strong在这种情况下如何与for循环相关。

2 个答案:

答案 0 :(得分:2)

这不是相同的代码,循环不会更改变量applesbananasoranges

的值

在循环中,您将排序结果分配给局部变量fruit,这不会影响applesbananasoranges中存储的值的内容

在“展开”代码中,您将排序结果分配给原始变量,因此会覆盖此变量的内容。

此外,我认为你的循环类型Fruit是错误的,除非applesbananasoranges的类型为Fruit,而不是类型{{ 1}}其余代码所暗示的。

答案 1 :(得分:1)

不,它不一样,也是如此:

NSArray* fruits= [apples sortedArrayUsingComparator: comparator ];
fruits= [bananas sortedArrayUsingComparator: comparator];
fruits= [oranges sortedArrayUsingComparator: comparator];

所以前两种排序没用,因为你只将水果分配给最后排序的数组:oranges。

可能的解决方案

目前尚不清楚你想要达到的目标,也许是这样的:

NSArray* sortedFruits;
for(NSArray* fruit in @[apples, bananas, oranges])     
{
    NSArray* sorted = [fruit sortedArrayUsingComparator:comparator];
    [sortedFruits addObject: sorted];
}

这样你得到一个包含3个项目的数组:苹果,香蕉和橙子的排序结果。