OC陣列 官方文件

2021-07-04 09:38:39 字數 3607 閱讀 5466

陣列 

(nsarray

) 用於表示有序的物件列表。只要求每個專案都是 

objective-c 

物件;不要求每個物件都是同乙個類的例項。

如果要保持陣列中的順序,每個元素都應儲存在從 

0 開始的索引中。

建立陣列

與本章前文所述的值類一樣,您可以通過分配和初始化、類工廠方法或陣列字面常量來建立陣列。

根據物件數量的不同,可用的初始化和工廠方法也多種多樣。

+ (id)arraywithobject:(id)anobject;

+ (id)arraywithobjects:(id)firstobject, ...;

- (id)initwithobjects:(id)firstobject, ...;

由於

arraywithobjects:

和 initwithobjects:

方法都採用了以

nil

結束且數量可變的引數,所以您必須包括

nil

並將其作為最後乙個值。 

nsarray *somearray =

[nsarray arraywithobjects:someobject, somestring, somenumber, somevalue, nil];

此示例會建立乙個如上文所示的陣列。第乙個物件

someobject

的陣列索引為

0;最後乙個物件

somevalue

的索引則為 3。

如果所提供的其中乙個值為

nil

,則有可能使專案列表意外截斷。 

id firstobject = @"somestring";

id secondobject = nil;

id thirdobject = @"anotherstring";

nsarray *somearray =

[nsarray arraywithobjects:firstobject, secondobject, thirdobject, nil];

在這種情況下,

somearray

只會包含

firstobject

,因為

secondobject

(即 nil

)會被解析為專案列表的末尾。

使用緊湊語法建立陣列字面常量也是有可能的。

nsarray *somearray = @[firstobject, secondobject, thirdobject];

使用此語法時,請勿使用

nil

來結束物件列表;實際上,

nil

是無效值。例如,如果您嘗試執行以下**,那麼會在執行時中捕獲到乙個異常: 

id firstobject = @"somestring";

id secondobject = nil;

nsarray *somearray = @[firstobject, secondobject];

// exception: "attempt to insert nil object"

查詢陣列物件

建立陣列後,可以通過查詢來獲得資訊,如其中有多少個物件,或者其中是否包含給定的專案。

nsuinteger numberofitems = [somearray count];

if ([somearray containsobject:somestring])  

還可以按照給定索引查詢陣列來找到專案。如果請求的索引無效,那麼會在執行時中獲得越界異常。為了避免得到異常,應始終首先檢查專案的數量。 

if ([somearray count] > 0)  

此示例用於檢查專案的數量是否大於

0。如果數量大於 0,

foundation

函式 nslog

會記錄第乙個專案(索引為

0)的描述。

除了使用

objectatindex:

之外,還可以使用下標語法來查詢陣列,就像在標準的

c 陣列中訪問值一樣。上乙個示例可被重寫為: 

if ([somearray count] > 0)  

排序陣列物件

nsarray

類提供了多種方法對其收集的物件進行排序。由於

nsarray

是不可變的,因此這類方法都會返回新的陣列,並在其中包含排好序的專案。

例如,您可以通過在每個字串上呼叫

compare:

,對字串陣列進行排序。 

nsarray *unsortedstrings = @[@"gammastring", @"alphastring", @"betastring"];

nsarray *sortedstrings =

[unsortedstrings sortedarrayusingselector:@selector(compare:)];

可變性

雖然 nsarray

類本身不可變,但它仍可包含可變物件。例如,如果將可變字串新增到不可變的陣列,如下所示: 

nsmutablestring *mutablestring = [nsmutablestring stringwithstring:@"hello"];

nsarray *immutablearray = @[mutablestring];

就可讓您變異該字串。 

if ([immutablearray count] > 0) 

如果要在初始建立陣列後新增或移除物件,可使用

nsmutablearray

,它提供了很多方法來新增、移除或替換乙個或多個物件。 

nsmutablearray *mutablearray = [nsmutablearray array];

[mutablearray addobject:@"gamma"];

[mutablearray addobject:@"alpha"];

[mutablearray addobject:@"beta"];

[mutablearray replaceobjectatindex:0 withobject:@"epsilon"];

此示例建立了由物件

@"epsilon"

、@"alpha"

和 @"beta"

構成的陣列。還可以對可變陣列進行適當排序,而無需建立二級陣列。 

[mutablearray sortusingselector:@selector(caseinsensitivecompare:)];

在這種情況下,包含在內的專案會按公升序且不區分大小寫的順序排列(

@"alpha"

、@"beta"

和@"epsilon"

)。 

OC數字和集物件 官方文件

數字 objective c 提供了建立 nsnumber 物件的速寫記法,從而無需呼叫初始化程式或類工廠方法就可以建立此類物件。只需在數值前面新增 符號,並選擇乙個新增在其後面的值型別指示。例如,建立封裝整數值和雙精度值的 nsnumber 物件,可以編寫如下 您甚至可以使用 nsnumber 字...

kvm官方文件

kvm官方文件 kvm活遷移 使用libvirt庫建立虛擬機器 domain 需要使用xml檔案作為配置檔案,如下是乙個最基本的虛擬機器配置檔案.2014 07 01 20 50 閱讀 233 在使用qemu建立虛擬機器的過程中是無法指定ip位址的,可是在實際應用中,我們是需要虛擬機器擁有ip位址的...

grok 官方文件

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!name code class html grok 解析任意文字並構造它 grok 是當前最好的方式在logstash 解析蹩腳的非結構化日誌資料 到一些結構化的可查詢的。這個工具是完美的對於syslog logs,apache和其他webserv...