一位工作的同事和我正在努力正确回答两者之间的确切区别 创建数组的两种不同方法:
NSArray *array1 = @[@"this is my first entry",@"this is my second entry"];
NSArray *array2 = [[NSArray alloc] initWithObjects:@"first entry",@"second entry",nil];
提前谢谢!
答案 0 :(得分:8)
第一种方式是首选。不仅因为它是“现代的”(并不意味着太多),更短,更不容易出错。
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将抛出异常,以便您可以修复代码。
答案 1 :(得分:1)
我同意 gnasher729
alloc 分配一块内存来保存对象,并返回指针。 为避免内存泄漏,用户还必须正确释放已分配的对象。因此,首先将首选本地使用任何对象。
基本上正在分配任何对象
要了解更多信息,请搜索 alloc , init 方法。
答案 2 :(得分:0)
他们都很好。第一个是更“现代”的文字语法,更优选。是的,NSString和NSDictionary的工作方式与现代文字语法相同。