好吧,我已经学习了一段时间的Objective-C,而且我不明白为什么创建一个NSArray会对你有益。这只是一些东西的集合吗?为什么不能在不制作NSArray的情况下使用它们。或者你可以在你的每个方法的实现中使用它中的对象(即使它是一个本地的ivar)。
所以,任何帮助将不胜感激。谢谢你们!
答案 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]
而不是mystring
和foo
)
简化内存管理(比NSArray
更容易发布一个NSStrings
)
缺点(NSArray)
:
可以使您的代码非常复杂(是myArray[0
]还是1?)
可能很难知道数组中的数据类型(如果它是NSString
,它总是一个字符串,一个数组可以容纳许多不同类型的数据)。你不会用50个纸巾擦干淋浴,而是用毛巾擦干。
所以归结为一件事。你在用什么上下文?