2017-07-15 86 views
1

IM在下面的代碼中尋找一些認識:Objective-C對象方法的數組?

 NSMutableArray<DEVICEID*>* device_a = @[ 

            [device_IDENTIFY command], 
            [device_STATUS command], 
            [device__POWER command]].mutableCopy; 

這段代碼創建對象的數組,其中在陣列中的每個元素的每次初始化調用每個對象的構造?

+0

這段代碼創建對象的數組? :YES和子類DEVICEID *的任何對象。 mutableCopy使用支持CURD功能創建相同對象類型的深層副本。 – kaushal

回答

1

這段代碼創建對象的數組,

是。

哪裏對數組中的每個元素的每次初始化調用每個對象的構造函數?

目前還不清楚你在這裏問的是什麼,但如果解釋說明的執行被解釋了,你會得到你的答案。

當你的語句按如下規則執行的步驟是:

  1. 這三個方法調用的表達式:[device_IDENTIFY command][device_STATUS command][device__POWER command];被評估。每個將返回一個對象的引用。
  2. 接下來對@[ ... ]進行評估。這是Objective-C語法,用於從封閉的表達式中創建一個不可變數組。此評估的結果是對NSArray類型的三元素數組的引用,其中包含步驟1中的對象引用。
  3. 然後在步驟2的數組上調用NSArray.mutableCopy方法。此方法返回對一個新的可變陣列,類型爲NSMutableArray
  4. 最後,將來自步驟3的參考值存儲在變量device_a中。

類型的device_a被聲明爲NSMutableArray <DEVICEID *> *,這是其中引入的Objective-C,以改善與夫特接口輕質泛型一個例子。一個標準的Objective-C可變數組,NSMutableArray,存儲對任何類型的對象的引用。device_a類型的<DEVICEID *>部分聲明此數組只應保存對DEVICEID類型(或其任何子類)對象的引用,並且Objective-C將執行編譯時檢查以在大多數(「輕量級」部分)中執行此操作,案例。

HTH

1

A NSMutableArray是Objective-c中的數組,它可以在符文時間修改。顯然一個數組可以容納任何類型的對象。 NSMutableArray<T>包含通用對象,有時我們需要在分配之前指定數組,它應該容納哪種類型的對象。

NSMutableArray<DEVICEID*>* device_a; 

上面的代碼是用來指定的,它會存放deviceId對象的指針。

@[[device_IDENTIFY command], [device_STATUS command], [device__POWER command]] 

這將創建和NSArray這是Immutable不能在運行時在NSArray最後一行mutableCopy我們終於可變拷貝進行修改,以創建一個可變的副本。

我希望這會幫助你。

0

根據蘋果文檔

的NSMutableArray類聲明的編程接口到管理對象的修改陣列 對象。此類將 插入和刪除操作添加到從繼承的基本數組處理行爲 NSArray

在上面的代碼中,我假定command是在返回DEVICEID*類型的對象的東西擴展文件(device_IDENTIFY的類型)中聲明的方法。

即,

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. 
相關問題