【问题标题】:NSArray initialization methodsNSArray 初始化方法
【发布时间】:2013-01-23 15:45:09
【问题描述】:

用初始化数组有什么区别

NSArray * array = [NSArray array];

和

NSArray * array = @[];

【问题讨论】:

    标签: ios objective-c initialization nsarray


    【解决方案1】:

    @[] 是以下的简写:

    id a = nil;
    NSArray* array = [NSArray arrayWithObjects:&a count:0];
    

    对于所有意图和目的而言,这实际上只是 [NSArray array] 的简写。

    这是在特定版本的编译器中添加的一项功能(实际上并不需要对 this 特定语法的运行时支持。

    它一点也不像@"" 的简写,因为@"" 会产生一个编译时间常数,并且会导致在运行时没有消息传递时间>。事实上,@""(任何@"sequence")是一个特例,它发出一个编译时间常数,在运行时实现零消息传递;零活力。 @"..." 更类似于 Objective-C 类,而不是对象的常规实例。

    【讨论】:

    • 我认为 @"" 产生一个 NSString 对象而不是编译时间常数。
    • 不;它实际上是一个编译时常量,它通过动态链接器加载,就像类和其他编译时发出的数据一样。不涉及消息传递。
    【解决方案2】:

    NSArray * array = @[];是NSArray * array = [NSArray array];的新方式

    【讨论】:

    • 1.与 Xcode 的版本无关(与使用的语言/标准/编译器的版本有关,Xcode 两者都不是)。 2.“和NSString *string = @"";一样”——我不这么认为。前者创建一个数组,后者创建一个字符串。
    • 一个不错的猜测,但大多不正确。第一条正确,其余错误。
    • 是的,没错。快速写下我的答案。编辑了我的答案。我的错。
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多