gpt4 book ai didi

使用@[] 和 initWithObjects 的 Objective-C 数组分配

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:46 24 4
gpt4 key购买 nike

我和一位工作同事正在努力正确回答两者之间的确切区别创建数组的两种不同方式:

NSArray *array1 = @[@"this is my first entry",@"this is my second entry"];
NSArray *array2 = [[NSArray alloc] initWithObjects:@"first entry",@"second entry",nil];
  • 谁能解释一下?
  • 首选的使用方式是什么?为什么?
  • 另一个有趣的问题是:它对 NSString、NSDictionary 等类是否同样有效?

提前致谢!

最佳答案

首选第一种方式。不仅因为它是“现代的”(意义不大)、更短且更不容易出错。

initWithObjects 有一个微妙的问题:如果你设法包含一个实际上为 nil 的对象指针,那么 initWithObjects 将使用它作为尾随的 nil 指针,而文字语法将抛出异常。

NSString* text1 = textField1.text;
NSString* text2 = textField2.text;
NSString* text3 = textField3.text;

NSArray* array1 = [[NSArray alloc] initWithObjects:text1, text2, text3, nil];
NSArray* array2 = @[text1, text2, text3];

如果 textField2 == nil,因此 text2 = nil,array1 将是一个只有一个元素的数组,而不是您预期的三个元素,这可能会导致各种难以发现的错误。 array2 将抛出异常,因此您可以修复代码。

关于使用@[] 和 initWithObjects 的 Objective-C 数组分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25785192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com