陣列
(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...