如何在Objective-C中创建NSArray?

时间:2010-11-09 10:26:23

标签: objective-c

好吧,我已经学习了一段时间的Objective-C,而且我不明白为什么创建一个NSArray会对你有益。这只是一些东西的集合吗?为什么不能在不制作NSArray的情况下使用它们。或者你可以在你的每个方法的实现中使用它中的对象(即使它是一个本地的ivar)。

所以,任何帮助将不胜感激。谢谢你们!

3 个答案:

答案 0 :(得分:1)

您可以为所需的每个“项目”创建实例变量:

NSString *str1;
NSString *str2;
NSString *str3;

...但这很难处理,数组更方便。如果你想打印所有这些字符串,你会怎么做?

NSLog(@"%@", str1);
NSLog(@"%@", str2);
NSLog(@"%@", str3);

循环数组不是更容易吗?

NSArray *strings = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
for (NSString *str in strings)
    NSLog(@"%@", str);

如果你有10个,20个字符串怎么样?如果您不知道需要多少串?如果您想将所有这些物品传递给其他人怎么办?你打算一个接一个地传递它们吗?

- (void) doSomethingWithString1: (NSString*) str1 andString2: (NSString*) str2…;

或者你宁愿传递数组?

- (void) doSomethingWithMyStrings: (NSArray*) strings;

答案 1 :(得分:0)

很多时候,您看到的NSArray是幕后工作的NSMutableArray的前线。

在接口中将其作为NSArray进行结算只是一种确保无法从中进行操作的方法,这可能会产生中等程度的灾难性后果。 (因此,当从对象中请求NSArray时,您通常会获得内部使用的NSMutableArray的副本。)

了解为什么创建NSMutableArray是有益的,这是留给读者的练习。

答案 2 :(得分:0)

不同的背景。

当您使用NSString时,它通常用于单个值。这很简单。

<强>的NSArray

如果要循环浏览多个键/值,请使用NSArray。无法遍历NSStrings,因为它们没有NSArray所做的订单结构。

为什么要使用NSString

每次只保存一个值时,调用myArray[0]foo[0]会很愚蠢。 NSString比NSArray更简单,因为您可以轻松地在GUI元素上设置值(无需调用myArray[0])

为什么要使用NSArray

它比NSString更灵活,因为NSArray可以包含多个值,在某些情况下可能需要这些值。

权衡利弊

优点(NSArray):

可以让您的代码更清晰(请致电myArray[1]myArray[0]而不是mystringfoo

简化内存管理(比NSArray更容易发布一个NSStrings

缺点(NSArray)

可以使您的代码非常复杂(是myArray[0]还是1?)

可能很难知道数组中的数据类型(如果它是NSString,它总是一个字符串,一个数组可以容纳许多不同类型的数据)。你不会用50个纸巾擦干淋浴,而是用毛巾擦干。

所以归结为一件事。你在用什么上下文?