我习惯于初始化NSArray的简单方法。
NSArray *temp = [[NSArray alloc] initWithObjects:@"data1",@"data2",@"data3",nil];
我现在遇到了一个非弧形应用程序中的代码,其中初始化在许多地方完成,如
NSArray *temp;
temp = [@[@"data1",@"data2",@"data3"] retain];
任何人都可以详细说明两者之间的差异,如果一个人比其他人好。
谢谢
答案 0 :(得分:2)
第二种是使用新的(ish)Objective-C Literal syntax。
此文字语法允许简化NSNumber
,NSArray
和NSDictionary
对象的创建,以及为数组和字典提供下标支持。
答案 1 :(得分:2)
第二个只是一个捷径:
+ (instancetype)arrayWithObjects:(id)firstObj,...
此
@[@"data1",@"data2",@"data3"];
将编译为:
[NSArray arrayWithObjects:@"data1",@"data2",@"data3",nil];
你不能说一个比另一个更好,它们是为不同的目的而制造的。发明了快捷语法来创建内容更快的数组。您可以看到快捷方式的代码少于完整的arrayWithObjects
示例。
还有其他快捷方式:
@{key: object}
创建NSDictionary
。
@YES @NO @value /* like @35 */ @(x + y)
创建NSNumber
答案 2 :(得分:0)
第一个语句实例化NSArray
个对象。在实践中,您很少看到此代码,因为NSArray
对象是不可变的,并且拥有一个没有您无法更改的元素的数组对象是没用的。
NSMutableArray *temp = [[NSMutableArray alloc] init];
或类似的东西,然后再将对象添加到数组中。
第二种情况声明了一个NSArray
类型的新变量,并将其分配给三个NSStrings
的数组,然后保留此NSArray
个对象。这个新数组是不可变的,就像之前一样,因此无法更改。通过发送保留消息,该对象的保留计数将递增,并且在发送release
之前不会释放该对象。如果没有retain,则该对象由其他东西拥有,可能是自动释放池,在这种情况下,当方法返回时,它将被释放。