1.NSArray 是一個父類,NSMUtableArray是其子類,他們構成了OC的數組。
2.NSArray的創建
NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];
//用對象初始化一個數組,這里是任意四個對象,不一定是字符串。
//OC中的數組,不是真正的數組,這是一個鏈表,nil的作用正是表明結尾。
3.NSArray的遍歷打印
我們在C語言中,要打印一個數組,要使用循環進行輸出,但是在OC中我 們完全可以直接打印,而不通過循環。
NSLog(@“%@”,array);//這里可以直接打印出數組的內容,如果打印的字符串超過一個單詞,在輸 出時會加雙引號。輸出如下:
{ one, two, three, "four good" }//OC自加花括號,來表明這是打印一個數組。
4.以一個數組初始化另外一個數組
NSArray * array2= [[NSArray alloc]initWithArray:array1];
//利用數組2 來初始化數組1,數組1中的元素與2 相同
//數組的每個元素是任意對象ID類型,因為數組實際上是一鏈表,所以不 要求數組的每個元素類型完全相同。
5.與NSString相同,alloc init 版本對應著一個arrayWithObjects版本
NSArray * array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
6.OC中可以使用一個數組的范圍內的元素生成另外一個數組,如下:
NSArray * array1 = [array objectsAtIndexes [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]];
//集合的元素是從1開始 3個元素,紅字部分函數返回一個數字集合的對象,集合元素是1,2,3,
6.查找數組的某個節點
從數組中去一個元素時要retain,因為數組可能是可變的,其他時候可能執行了delete等操作,使該對象無法引用,使用完時,同樣要release。
NSArray * str =[[array objectAtIndex:1]retain];
//取數組位置為1的字符串
7.遍歷的牛逼作用
(1)枚舉器法(傳入類的對象作為數組的元素)
NSEnumerator * enumerator = [array ObjectEnumerator];//數組對象創建一個枚舉器
id obj;//創建一個id類型的對象
while (obj=[enumerator nextObject]) {
NSLog(@"%@",obj);}
//循環的第一次,nextObject函數返回數組的元素0,第二次返回1,以此類推。
枚舉器法可以實現逆序遍歷,這是快速枚舉法不可替代的。
NSEnumerator * enumerator = [array reverseObjectEnumerator];
除了創建枚舉器,別的地方都與正序無區別。
(2)快速枚舉法
相比枚舉器法,快速枚舉法顯得更加簡潔
for(id obj in array)
{
NSLog(@"%@",obj);
}//循環的第一次,obj是結點0的地址,第二次是結點1的地址。
8.NSMutableArray 可變數組,數組元素是可變的,類似NSMUtableString。因為其可變性,所以可以對各節進行操作。
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",nil];
//數組的聲明同普通數組類似,但是我們可以對數組,進行添加結點,刪除 結點等操作。
8.添加結點
[array addObject:@"four"];//添加結點非常簡單,沒有字符串的各種區分
9.刪除結點
[array removeObjectAtIndex:1];//根據指數,刪掉的是@”two”
[array removeObject:@”Four”];//根據某個結點的地址,刪除對應的結點
[array removeObject:[array objectAtIndex:0] inRange:NSMakeRange(1, 4)];
//在某個范圍內(1,4),刪除與地址0位置相同地址的結點
[array removeObject:@”one” inRange:NSMakeRange(2, 3)];
//從2開始3個節點內,如果有地址和@”one”相同的結點,刪除
//在(2.3)范圍內,查找@”one”并刪除
后兩個函數作用相同,只是寫法不同而已。
10.NSString的分割
將字符串分割,然后將分割后的字符串一次存入一個動態數組中。類似C語 言中的strtok。
NSString * str = @"I am a so bad man.";
NSArray * array = [str componentsSeparatedByString:@" "];
//以空格為標準進行字符串分割,操作后,原字符串不變,只是生成了一堆 字符串,裝在一個數組中,達到分割的目的。
Strtok()有一強大的作用,是這個函數不能比擬的,strtok(p," ,")此時可以分 別以空格和","來進行字符串分割,以上函數就不能達到這個作用。我們需要字符合集來解決這問題。
NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" ,"]];
//紅字部分是創造一字符串集合,以字符串集合為參數進行分割
11.字符串拼接
將字符串分割,同樣可以將分割后的字符串重新拼接
NSString * str2 = [array componentsJoinedByString : @” ”];
//把數組中的字符串拼接在一起,中間空格隔開,形成新的字符串str2
12.字符串交換
[array exchangeObjectAtIndex:0 WithObjectAtIndex:array.count-1];
//交換兩個位置的結點,array.count-1 意思是最后一個結點
14.數組排序
[array sortUsingSelector:@selector (oldThanDog:)];
//oldThanDog這個函數為BOOL型函數,實際上是返回YES或者NO來控 制排序。
//這個函數可以排序,但是不知道排序的準則,這里的BOOL型函數實際上 是自寫的函數,通過返回值規定排序的原則。
14.seletor 選擇器
SEL型變量實際上可以看做一函數指針。
我們可以將函數,抽象成SEL變量來滿足我們的需求。
在編寫代碼的時候,不能確定某一部分引用哪個函數的時候,我們可以引用 SEL型變量[dog performselector:sel] 來調用函數,這里的sel是對某函數抽象化SEL的結果。
對于帶參的SEL,我們這樣處理。
[str performSelector :sel withObject:str2 ];
//紅字部分,就是函數帶參SEl類型的處理方式
本文出自 “CoderToDeveloper” 博客,請務必保留此出處http://rongchengfei.blog.51cto.com/6269699/1086045
文章列表