0

我的班级有一些@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];

comparator是一个NSComparator

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

4

2 回答 2

2

这不是相同的代码,循环不会改变变量的值applesbananas并且oranges

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

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

另外我认为您的循环类型Fruit是错误的,除非apples,bananas和是其余代码所建议oranges的类型Fruit而不是类型。NSArray

于 2013-02-07T12:37:03.870 回答
1

不,它不一样,相同的是:

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

所以前两种排序是没有用的,因为你只将水果分配给最后一个排序的数组:橙子。

一个可能的解决方案

目前尚不清楚您想要实现什么,可能是这样的:

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

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

于 2013-02-07T13:03:43.753 回答