Ios Objective-C对象方法数组?

Ios Objective-C对象方法数组?,ios,objective-c,arrays,Ios,Objective C,Arrays,我想了解一下下面的代码: NSMutableArray<DEVICEID*>* device_a = @[ [device_IDENTIFY command], [device_STATUS command], [device__POWER command]].mu

我想了解一下下面的代码:

     NSMutableArray<DEVICEID*>* device_a = @[

                                   [device_IDENTIFY command],
                                   [device_STATUS command],
                                   [device__POWER command]].mutableCopy;
NSMutableArray*设备\u a=@[
[设备识别命令],
[设备状态命令],
[设备\电源命令]].mutableCopy;

这段代码是否正在创建一个对象数组,其中数组中每个元素的每次初始化都会调用每个对象的构造函数?

A
NSMutableArray
是Objective-c中的数组,可以在运行时修改。显然,数组可以容纳它所喜欢的任何类型的对象
NSMutableArray
保存通用对象,有时我们需要在分配之前指定数组,它应该保存哪种类型的对象

  NSMutableArray<DEVICEID*>* device_a;
这将创建和
NSArray
,它是
不可变的
,在运行时无法修改,因此最后我们创建了
NSArray的可变副本
最后一行
mutableCopy
创建了一个可变副本

我希望这对你有帮助


这段代码正在创建一个对象数组

数组中每个元素的每次初始化调用每个对象的构造函数的位置

现在还不清楚你在问什么,但是如果你解释了这个陈述的执行,你可能会得到你的答案

执行语句时,步骤如下:

  • 三个方法调用表达式中的每一个:
    [device\u identification command]
    [device\u STATUS command]
    [device\u POWER command]
    ;进行评估。每个将返回对对象的引用
  • 接下来对
    @[…]
    进行评估。这是Objective-C语法,用于从封闭表达式创建不可变数组。此计算的结果是对三元素数组的引用,类型为
    NSArray
    ,其中包含步骤1中的对象引用
  • 然后从步骤2开始对数组调用
    NSArray
    .mutableCopy
    方法。此方法返回对类型为
    NSMutableArray
    的新可变数组的引用
  • 最后,来自步骤3的参考被存储到变量
    设备\u a
  • device\u a
    的类型被声明为
    NSMutableArray*
    ,这是引入Objective-C以改进与Swift接口的轻量级泛型的一个示例。标准的Objective-C可变数组,
    NSMutableArray
    ,存储对任何类型对象的引用。
    device\u a
    类型的
    部分声明此数组应仅包含对类型为
    DEVICEID
    的对象(或其任何子类)的引用,Objective-C将执行编译时检查,以在大多数情况下强制执行此操作(“轻量级”部分)


    根据苹果的文件

    NSMutableArray类向声明编程接口 管理可修改对象数组的对象。这个类增加了 对基本数组处理行为的插入和删除操作 继承自NSArray

    在上面的代码中,我假设
    命令
    是一个在扩展文件中声明的方法(
    device\u IDENTIFY
    的类型),它返回类型为
    DEVICEID*
    的对象

    DEVICEID*identity=[device_IDENTIFY命令];
    DEVICEID*状态=[设备状态命令];
    DEVICEID*标识=[device_POWER command];
    NSArray*数组=@[identity,status,identity]//已创建包含3个DEVICEID*对象的数组。
    NSMUTABLEARRY*设备_a=[array mutableCopy]//从不可变副本创建可变副本。
    
    此代码是否正在创建对象数组?:YES和子类DEVICEID*的任何对象。mutableCopy创建具有支持CURD功能的相同对象类型的深度副本。
      @[[device_IDENTIFY command], [device_STATUS command], [device__POWER command]]
    
    DEVICEID* identity = [device_IDENTIFY command];
    DEVICEID* status= [device_STATUS command];
    DEVICEID* identity = [device_POWER command];
    NSArray *array = @[identity, status, identity]; //Created array with 3 DEVICEID* objects.
    NSMutableArray<DEVICEID*>* device_a = [array mutableCopy]; //created mutable copy from An immutable one.