OC笔记,数组NSArray
2015-06-02 14:46
337 查看
创建数组。
3种常用方法遍历数组。
可变数组NSMutableArray。
所有的笔记记录在代码的注释中,几乎一句一注释,通俗易懂。
代码部分如下:
打印结果如下:
3种常用方法遍历数组。
可变数组NSMutableArray。
所有的笔记记录在代码的注释中,几乎一句一注释,通俗易懂。
代码部分如下:
#import <Foundation/Foundation.h> #import "Dog.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSArray * array = [[NSArray alloc] initWithObjects:@"One", @"Two", @"Three", nil]; // 数组的元素可以是任意的对象。 // 数组中装有元素的地址,而不是对象的本体。 // 所以一个对象@"One"可以放在两个数组中。即两个数组可以装同一个对象的地址。 // 数组更接近于C当中的链表 // 遍历打印数组中的每个元素 NSLog(@"%@", array); // 打印数组,就是打印了数组中的每一个元素。 // 任何一个对象,使用%@去打印,就是打印这个对象的description方法的返回值。 // 在dog类中重写了description方法,用%@打印dog,则会调用该方法。 Dog * dog = [[Dog alloc] init]; NSLog(@"%@", dog); // Dog中有description方法,则dog对象也可以放到数组中。 NSArray * array2 = [[NSArray alloc] initWithObjects:@"One", @"Two", dog, nil]; NSLog(@"array2: %@", array2); // 打印结果中This is a dog外面加了双引号,是因为他有多个单词。 // 遍历数组的3种方法 // 枚举器法 // 创建一个枚举器,使用数组的元素创建一个枚举器。 NSEnumerator * enumerator = [array objectEnumerator]; id obj; // 该方法第一次返回数组中第一个元素的地址,第二次返回第二个地址....最后一次返回nil // 返回nil的时候,赋值表达式的值也是nil,循环结束 while (obj = [enumerator nextObject]) { NSLog(@"enumerator array: %@", obj); } // 快速枚举法 for (id obj2 in array) { NSLog(@"fast enumerator array: %@", obj2); } // 使用i值遍历 // 数组中有两个方法 // [array count]方法返回数组元素的个数 // [array objectAtIndex:]方法返回单个元素的地址 NSInteger i; for (i = 0; i < [array count]; i++) { NSLog(@"i with array loop: %@", [array objectAtIndex:i]); } // 以上的数组均是不可变数组,在创建之后元素的个数和顺序不可变 // 可变数组 MutableArray NSMutableArray * mArray = [[NSMutableArray alloc] init]; // 增加元素 [mArray addObject:@"mOne"]; [mArray addObject:@"mTwo"]; [mArray addObject:@"mThree"]; NSLog(@"MutableArray mArray: %@", mArray); // 删除元素 // [mArray removeObject:@"mOne"]; // NSLog(@"removeObject mArray: %@", mArray); // 用@”“创建的字符串对象,如果完全一样,那么就是同一个对象,地址一样。 // 删除指定的第几个字符串 // [mArray removeObjectAtIndex:1]; // NSLog(@"remove at Index mArray: %@", mArray); // 交换两个数组元素的位置 [mArray exchangeObjectAtIndex:0 withObjectAtIndex:2]; NSLog(@"exchange mArray: % 4000 @", mArray); // 可变字符串数组也可以像不可变数组那样遍历 // 但是在枚举遍历中不能删除数组中的元素 // NSMutableArray * mmArray = [[NSMutableArray alloc] initWithObjects:@"One", @"Two", @"Three", nil]; // NSEnumerator * enu = [mmArray objectEnumerator]; // NSString * mStr; // while (mStr = [enu nextObject]) { // [mmArray removeLastObject]; // } // NSLog(@"enumerator mmArray: %@", mmArray); // 程序发生奔溃 // 实际上只有第一次循环可以执行 // 当对第一次数组进行修改之后 // 第二次使用枚举法遍历就会奔溃 // 但是,如果我们进行逆序遍历,生成一个逆序枚举器,再修改就没有任何问题。 NSMutableArray * mmArray = [[NSMutableArray alloc] initWithObjects:@"One", @"Two", @"Three", nil]; NSEnumerator * enu = [mmArray reverseObjectEnumerator]; NSString * mStr; while (mStr = [enu nextObject]) { [mmArray removeLastObject]; NSLog(@"%@", mStr); } NSLog(@"%@", mmArray); // 快速枚举法不能修改,i值可以随意修改 // 数组和字符串的联合使用 NSString * sstr = @"I am a so bad man"; // 按每个单词分开逆序表示 // 首先将字符串进行分割,分割出的字符串放在数组中 // 函数按参数分割字符串,创建一个数组,返回数组的地址 NSArray * sArray = [sstr componentsSeparatedByString:@" "]; NSLog(@"sArray: %@", sArray); // 创建一个空的可变数组 NSMutableArray * mutaleArray = [[NSMutableArray alloc] init]; // 对数组sArray逆序的遍历 NSEnumerator * enumerator1 = [sArray reverseObjectEnumerator]; NSString * obj1; while (obj1 = [enumerator1 nextObject]) { // 一次添加到mutableArray数组里面 [mutaleArray addObject:obj1]; } NSLog(@"mutableArray: %@", mutaleArray); // 再拼回成字符串 // 用参数连接数组中的每个字符串 NSString * newStr = [mutaleArray componentsJoinedByString:@" "]; NSLog(@"%@", newStr); } return 0; }
打印结果如下:
2015-06-02 14:45:56.268 NSArray[16559:4906236] ( One, Two, Three ) 2015-06-02 14:45:56.269 NSArray[16559:4906236] This is a dog! 2015-06-02 14:45:56.269 NSArray[16559:4906236] array2: ( One, Two, "This is a dog!" ) 2015-06-02 14:45:56.274 NSArray[16559:4906236] enumerator array: One 2015-06-02 14:45:56.274 NSArray[16559:4906236] enumerator array: Two 2015-06-02 14:45:56.274 NSArray[16559:4906236] enumerator array: Three 2015-06-02 14:45:56.275 NSArray[16559:4906236] fast enumerator array: One 2015-06-02 14:45:56.275 NSArray[16559:4906236] fast enumerator array: Two 2015-06-02 14:45:56.275 NSArray[16559:4906236] fast enumerator array: Three 2015-06-02 14:45:56.275 NSArray[16559:4906236] i with array loop: One 2015-06-02 14:45:56.275 NSArray[16559:4906236] i with array loop: Two 2015-06-02 14:45:56.275 NSArray[16559:4906236] i with array loop: Three 2015-06-02 14:45:56.276 NSArray[16559:4906236] MutableArray mArray: ( mOne, mTwo, mThree ) 2015-06-02 14:45:56.276 NSArray[16559:4906236] exchange mArray: ( mThree, mTwo, mOne ) 2015-06-02 14:45:56.276 NSArray[16559:4906236] Three 2015-06-02 14:45:56.276 NSArray[16559:4906236] Two 2015-06-02 14:45:56.276 NSArray[16559:4906236] One 2015-06-02 14:45:56.276 NSArray[16559:4906236] ( ) 2015-06-02 14:45:56.276 NSArray[16559:4906236] sArray: ( I, am, a, so, bad, man ) 2015-06-02 14:45:56.277 NSArray[16559:4906236] mutableArray: ( man, bad, so, a, am, I ) 2015-06-02 14:45:56.277 NSArray[16559:4906236] man bad so a am I
相关文章推荐
- oc 的一些概念
- array 排序
- [代码例程] iPhone开发入门(7)--- 从C/C++语言到Objective-C语
- IOS 面试习题 Object-C
- objective-c block 讲解
- IOS求职之OC面试题
- iOS OC和Swift混编
- OC_继承,初始化
- OC 省市区划分
- iOS开发 — Quartz 2D知识点应用 (制作了一个Demo,源代码)
- NSData和NSMutableData
- 编写 Objective-C 代码/掌握基本的编程技能 之 读后笔记
- NSArray的排序和乱序
- 字面量语法的好处
- c语言入门(一)
- c语言入门(三)分支结构
- c语言入门(四)循环
- c语言入门(八)结构体
- c语言入门(七)函数
- 关于TCBlobDownload中续传的问题