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