OC-NSArray
一.認(rèn)識(shí)數(shù)組
oc中可以把NSObject對(duì)象的子類放到數(shù)組這個(gè)集合中,但是int、float、double等基礎(chǔ)數(shù)據(jù)類型需要先進(jìn)行轉(zhuǎn)換才可以存入數(shù)組。
oc中數(shù)組以NS開頭,其中分為可變數(shù)組和不可變數(shù)組;
?
1.不可變數(shù)組(NSArray)
數(shù)組在創(chuàng)建的時(shí)候被初始化之后,不可以再次進(jìn)行增、刪、改;
?
//NSArray 是一個(gè)類,蘋果公司封裝好的數(shù)組類。
? ? ? ? //數(shù)組需要先分配內(nèi)存再使用,
? ? ? ? //initWithObjects 逐個(gè)單詞翻譯:init -- 初始化 with ---對(duì)... objects --- 多個(gè)對(duì)象
? ? ? ? //initWithObjects 用多個(gè)對(duì)象對(duì) [NSArray alloc] 分配的內(nèi)存空間進(jìn)行初始化
? ? ? ? NSString* str = [NSString stringWithFormat:@"%d",123];
?? ? ? ?
? ? ? ? NSArray* arr = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil];
? ? ? ? //【注】以小括號(hào)包圍(打印的結(jié)果),每個(gè)數(shù)據(jù)都是以逗號(hào)隔開的數(shù)據(jù)格式是數(shù)組數(shù)據(jù)
?
如: (
? ? one,
? ? two,
? ? three
)
?? ? ? ?
?? ? ? ?
? ? ? ? dog* mydog = [[dog alloc]init];
? ? ? ? mydog.value = 100;
? ? ? ? cat* mycat = [[cat alloc]init];
?? ? ? ?
? ? ? ? //oc中的數(shù)組可以存儲(chǔ)不一樣類型的數(shù)據(jù)
? ? ? ? //定義objectArr這個(gè)對(duì)象并給它分配內(nèi)存并初始化值,最后一個(gè)nil結(jié)尾一定不要省略
? ? ? ? //數(shù)組初始化之后,不能對(duì)其進(jìn)行增刪改的數(shù)組,是不可變數(shù)組,不可變數(shù)組的數(shù)據(jù)只有第一次初始化的時(shí)候給賦值,之后不允許進(jìn)行增刪改;可以理解為是一種只讀做用;
? ? ? ? NSArray* objectArr = [[NSArray alloc]initWithObjects:mydog,mycat,@"yudejun", nil];
?? ? ? ?
? ? ? ? NSLog(@"%@\n%@",arr,objectArr);
?? ? ? ?
? ? ? ? //取元素
? ? ? ? //【注】嚴(yán)禁數(shù)組越界
? ? ? ? //隱式轉(zhuǎn)換
? ? ? ? //
? ? ? ? dog* tmp = [objectArr objectAtIndex:0];
? ? ? ? NSLog(@"%d",tmp.value);
?? ? ? ?
? ? ? ? //取數(shù)組元素個(gè)數(shù)
? ? ? ? NSLog(@"%ld",[objectArr count]);
?? ? ? ?
? ? ? ? //遍歷數(shù)組
? ? ? ? for (int i=0; i<[arr count]; i++) {
?? ? ? ? ? ?
? ? ? ? ? ? NSLog(@"%@",[arr objectAtIndex:i]);
? ? ? ? }
? ? ? ? //oc中遍歷數(shù)組有一個(gè)更簡單的方法
? ? ? ? //這個(gè)語法就是for(in)語法,for循環(huán)先去判斷NSString* str 是否在arr中,如果在,則繼續(xù)循環(huán)
? ? ? ? //數(shù)組會(huì)遍歷arr的元素個(gè)數(shù)次
? ? ? ? for (NSString* str in arr) {
? ? ? ? ? ? NSLog(@"%@",str);
? ? ? ? }
? ? ? ? //優(yōu)缺點(diǎn)比對(duì):
? ? ? ? //第一種寫法方便遍歷指定元素,但寫起來繁瑣。
? ? ? ? //第二種寫法簡潔,并且不會(huì)出現(xiàn)數(shù)組越界導(dǎo)致程序崩潰的問題
? ? ? ? //這2種方式互補(bǔ),某一些情況下必須用第一種方式才能解決。
?? ? ? ?
?? ? ? ?
? ? ? ? //從Xcode4.6開始,蘋果提供如下寫法
? ? ? ? //創(chuàng)建了一個(gè)不可變數(shù)組并初始化了值。
?? ? ? ?
? ? ? ? NSArray* TempArr = @[@"yu",@"de",@"jun"];
?? ? ? //如上方法等價(jià): NSArray* TempArr = [[NSArray alloc]initWithObjects:@"yun",@"deg",@"jun", nil];
? ? ? ? NSLog(@"%@",TempArr);
?? ? ? ?
? ? ? ? //[arr objectAtIndex:0]
? ? ? ? NSLog(@"%@",arr[1]);
————————————————————————————————————————————————————————————————————————
? ? ? ? //NSMutableArray 為可變數(shù)組,可以進(jìn)行增刪改
? ? ? ? NSMutableArray* m_arr = [[NSMutableArray alloc]init];
?? ? ? ?
? ? ? ? //添加元素
? ? ? ? [m_arr addObject:@"1"];
? ? ? ? [m_arr addObject:mydog];
? ? ? ? [m_arr addObject:@"3"];
?? ? ? ?
? ? ? ? //刪除下標(biāo)索引值是0的元素
? ? ? ? [m_arr removeObjectAtIndex:0];
?? ? ? ?
? ? ? ? //交換數(shù)組元素
? ? ? ? [m_arr exchangeObjectAtIndex:0 withObjectAtIndex:1];
?? ? ? ?
? ? ? ? //清空數(shù)組? 刪除數(shù)組中所有元素
? ? ? ? [m_arr removeAllObjects];
?? ? ? ?
? ? ? ? //刪除數(shù)組元素中最后一個(gè)元素
? ? ? ? [m_arr removeLastObject];
?? ? ? ?
? ? ? ? //插入一個(gè)元素,在索引值是0的位置,原來元素位置后移
? ? ? ? [m_arr insertObject:@"haha" atIndex:0];
?? ? ? ?
? ? ? ? //替換元素 用999這個(gè)對(duì)象值來替換掉第0個(gè)元素的值
? ? ? ? [m_arr replaceObjectAtIndex:0 withObject:@"999"];
?? ? ? ?
? ? ? ? //判斷是否包含某一個(gè)對(duì)象
? ? ? ? BOOL isContain = [m_arr containsObject:@"999"];
? ? ? ? if (isContain) {
? ? ? ? ? ? NSLog(@"包含");
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? NSLog(@"不包含");
? ? ? ? }
? ? ? ??
?
轉(zhuǎn)載于:https://www.cnblogs.com/GJ-ios/p/5285987.html
總結(jié)
以上是生活随笔為你收集整理的OC-NSArray的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2016/3/16 高级查询 ①
- 下一篇: JVM的内存区域划分(转)