OC知识点归纳
OC三个常用基础类
头语:
新手一枚,在学习过程中,整理自己的笔记,与各位新手大大一起分享,一起进步(PS:其实是怕自己会忘记,又苦于没有钱买笔记本,哈哈),如有错误,望大家提出,我一定最快修改,这仅仅是小生的自我理解,并不想误人子弟,不喜勿喷.
一.首先,整理一下在OC基础中会接触到的类:
NSString,NSMutableString
NSArray,NSMutableArray
NSDictionary,NSMutableDictionary 以上3组类都是经常会用到的,使用频率非常高,然后就是自定义类等等
还有一些比如NSData,NSDate,NSFileHandle这些类,用的一般不是很多
1.NSString和NSMutableString
1.1NSString:
//1)最基本的方式 NSString *str = @"abc"; //常量区 //2) 类方法创建字符串 NSString *str2 = [NSString stringWithFormat:@"xxx"]; //堆区 //3)使用对象方法,来创建字符串 NSString *str3 = [[NSString alloc]initWithString:@"abc"];//常量区 //4) 把字符串写入到到文件中 NSString *str4 = @"每当我错过一个女孩,我就向山上放一块砖,于是这个世界就有了长城!";
//可变字符串的操作: //+(instancestype)string{ return [[[NSMutableString alloc] init] autorelease];} NSMutableString *str = [NSMutableString string]; // 1)添加内容到字符串中 // i, appendString [str appendStbaring:@"hello"]; // ii, 格式化的插入 int a = 10; [str appendFormat:@" a = %d",a]; // iii.在指定位置处插入字符串 [str insertString:@"abc" atIndex:2]; // 2)从字符串中删除内容 // 删除指定范围的 字符串 //heabcllo a = 10 [str deleteCharactersInRange:NSMakeRange(2, 3)]; // 3)替换字符串中的内容 //hello a = 10 //hesss a = 10 //当给定的内容大于 我们指定的范围的时候 ,这个时候,以给定的内容为准 [str replaceCharactersInRange:NSMakeRange(2, 3) withString:@"sssxxxx"]; // 4)查找子字符串 () NSRange r1 = [str rangeOfString:@"ss"]; NSLog(@"%@",NSStringFromRange(r1)); NSLog(@"str : %@",str); //str:hesssxxxx a = 10 // 重要: // 1)NSMutableString 容易犯的错误 // NSMutableString NSString NSMutableString *str2 = @"abc"; // 运行的时候,str2 ----> NSString //编译的时候不会报错,因为str2 是NSMutableString 类型的 //运行时,会报错 // str2 变成了NSString 类型的了 // NSString 是不可变的,没有appendString 方法 [str2 appendString:@"xxxx"]; // 2)NSMutableString 有一个string的属性,它可以吧字符串内容给覆盖掉 str.string = @"abc"; //str = abc NSLog(@"str : %@",str);
两者的区别:NSString是不可变的, 里面的文字内容是不能进行修改的,NSMutableString是可变的, 里面的文字内容可以随时更改
2.NSArray和NSMutableArray
// 1) 使用类方法创建 NSArray *arr = [NSArray array]; //空数组 没有意义 // 2) 创建数组,有一个元素 (元素的类型必须是一个OC的对象) NSArray *arr1 = [NSArray arrayWithObject:@"abc"]; // 3) 创建数组,有多个元素 NSArray *arr2 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil]; // 4) 可以用一个已经存在的数组,创建一个新的数组 NSArray *arr3 = [NSArray arrayWithArray:arr2]; // 5) 快速创建 NSArray *arr4 = @[@"one",@"two",@"three",@"1",@1]; // 使用对象方法创建数组 // nil用来标志数组已经结束了 // 怎么样才能存储一个null // [NSNull null]; //打印时是 "<null>" NSArray *arr5 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",[NSNull null],@"5", nil]; // 查看数组的内容 // 当我们以 %@ 的格式,打印 数组 ,此时得到的是一个(数组元素,数组元素2) NSLog(@"%@",arr5); //NSArray没有addObject这个方法 NSMutableArray *arrayM = [NSMutableArray arrayWithObjects:@"hehe",@"lala",@"haha", nil]; //给可变数组arrayM添加一个hehe1对象 [arrayM addObject:@"hehe1"]; NSLog(@"%@\n%@",arr2,arrayM);
2.2 NSLog打印结果:
2016-04-27 12:44:05.986 3.14[10393:372743] ( one, two, three ) ( hehe, lala, haha, hehe1 )
2.3.总结
NSArray和NSMutableArray的区别:NSArray是不可变的,一旦初始化完成,其内容是固定的,永远不能修改,也不能删除里面的元素.
3.NSDictionary和NSMutableDictionary
3.1NSDictionary
//创建 对象 // 1) 类方法 NSDictionary *dict = [NSDictionary dictionary]; //空字典,不可变,没有意义 // value key NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"]; // 创建多组元素 NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil]; // 2) 对象方法 NSDictionary *dict4 = [[NSDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1", nil]; // 注意: 1) 不管是key 还是 value 注意都必须是对象类型(不能是基本数据类型) // 2) key的值是不能够重复的,如果键值重复,则后面的不能再添加了 // 3) 集合元素是无需的 // 4) 可以通过key值来快速的获取value的值 // NSLog 以 %@的形式输出 字典,得到的是 {键值对} NSLog(@"dict = %@",dict3); //快速创建字典 (常用) NSDictionary *dict5 = @{@"k1":@"v1",@"k2":@"v2",@"k3":@"v3",@"k1":@"v8"}; NSLog(@"dict5 = %@",dict5); //访问 // 1) 获取字典的长度 NSLog(@"%ld",dict5.count); // 2) 根据key值,获取value值 NSString *str2 = [dict5 objectForKey:@"k2"]; //NSLog(@"str2 = %@",str2); //遍历 // 1) 快速枚举的方式 for (id obj in dict5) { // 此时遍历的过程中,得到的obj 都是key //[dict5 objectForKey:obj]根据key获取value值 NSLog(@"key = %@, value = %@",obj,[dict5 objectForKey:obj]); } // 2)使用block的方式 [dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { if([key isEqualToString:@"k2"]){ *stop = YES; //遍历停止 }else{ NSLog(@"key= %@,value = %@",key,obj); } }]; //字典的遍历不一定是有序的 //检查字典中是否包含指定的key值 // 获取所有的key NSArray *keys = [dict5 allKeys]; NSLog(@"key = %@",keys); if([keys containsObject:@"k1"]){ NSLog(@"存在"); }
NSDictionary没有增\删\改\查,因为是不可变的,它只能获取,遍历.
3.2NSMutableDictionary:
//1) 创建 字典 // 类方法 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObject:@"zhaosi" forKey:@"zs"]; // 对象方法 NSMutableDictionary *dict3 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1",@"v2",@2, nil]; //快速创建 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; dict.dictionary = @{@"name":@"bob",@"age":@"18"}; //添加值到字典中 [dict setObject:@"man" forKey:@"sex"]; NSLog(@"%@",dict); //2) 操作字典 增删改查 [dict setObject:@"v1" forKey:@"k1"]; [dict setObject:@"v2" forKey:@"k2"]; [dict setObject:@"v3" forKey:@"k3"]; //删除元素 [dict removeObjectForKey:@"k1"]; [dict removeAllObjects]; //修改元素 [dict2 setObject:@"zhangsan" forKey:@"zs"]; //简写形式 dict2[@"zs"]=@"zhaosi"; dict2[@2]= @"vvvvvv2"; //3) 注意 NSLog(@"dict = %@",dict2);
NSMutableDictionary 可以做到增\删\改\查,这是与NSDictionary的区别
以上三组类,大致的区别是一样的,都是可变与不可变之分,后期会讲到setter(设置)和getter(获取)跟这个道理是一样的,所以在使用过程中,一定要先判断自己需要的对象是可变的还是不可变的.
未完待续....
posted on 2016-04-27 13:14 Xib'sStory 阅读(439) 评论(0) 编辑 收藏 举报