003-Foundation框架
第一部分:字符串
一、NSString(不可变字符串)
1.创建字符串
1 // @创建 2 NSString *str1 = @"abcdef.com.10588423@qq.com"; 3 // new(类方法)创建 4 NSString *str2 = [NSString new]; 5 // alloc init创建 6 NSString *str3 = [[NSString alloc] init]; 7 NSString *str4 = [[NSString alloc] initWithFormat:@"%@%@", str1, str2]; 8 NSString *str5 = [[NSString alloc] initWithCString:"abcd"]; // C的字符串 --> OC的字符串 9 // 其他对象转化字符串 10 NSString *str6 = NSStringFromClass([NSObject class]); // 类名 --> 字符串
2.字符串的操作
1 // 获取字符串的长度 2 NSUInteger *length1 = [str1 length]; 3 NSUInteger *length2 = str1.length; 4 // 根据索引获取单个字符 5 unichar ch = [str1 characterAtIndex:0]; 6 // 根据索引获取子串(截取) 7 NSString *subStr1 = [str1 substringFromIndex:3]; // [index, 末尾] 8 NSString *subStr2 = [str1 substringToIndex:4]; // [开头, index) 9 NSString *subStr3 = [str1 substringWithRange:NSMakeRange(2, 5)]; // 从index开始,截length个长度 10 // 获取子串在父串中的索引位置 11 NSRange range1 = [str1 rangeOfString:subStr1]; // 正向查找 12 if (range1.location != NSNotFound) { 13 NSLog(@"location = %ld, length = %ld", range1.location, range1.length); 14 } 15 NSRange range2 = [str1 rangeOfString:subStr1 options:NSBackwardsSearch]; // 反向查找
3.字符串的判断
1 // 判断字符串是否为空 2 if (str1 == nil || str1.length == 0) { 3 NSLog(@"字符串是否为空"); 4 } 5 // 判断字符串的前缀 6 if ([str1 hasPrefix:@"www"]) { 7 NSLog(@"str1以www开头"); 8 } 9 // 判断字符串的后缀 10 if ([str1 hasSuffix:@".edu"]) { 11 NSLog(@"str1以.edu结尾"); 12 } 13 // 判断两个字符串是否相等 14 if ([str1 isEqualToString:str2]) { 15 NSLog(@"str1 = str2"); 16 } 17 // 比较字符串的大小(逐个比较字符串中各字符的ASSIC码) 18 NSComparisonResult result = [str1 compare:str2]; 19 if (result == -1) { 20 NSLog(@"str1 < str2"); 21 } else if (result == 0) { 22 NSLog(@"str1 = str2"); 23 } else if (result == 1) { 24 NSLog(@"str1 > str2"); 25 }
4.不同类型间的转化
1 // 基本数据类型 --> 字符串 2 // 基本数据类型(int、folat、double、char) 3 int a = 10; 4 float b = 10.01; 5 double c = 10.0009; 6 char d = 'A'; // unichar --> 用%C char --> 用%c 7 NSString *string1 = [NSString stringWithFormat:@"%d", a]; // int --> NSString 8 NSString *string2 = [NSString stringWithFormat:@"%.2f", b]; // float --> NSString 9 NSString *string3 = [NSString stringWithFormat:@"%.4f", c]; // double --> NSString 10 NSString *string4 = [NSString stringWithFormat:@"%c", d]; // char --> NSString 11 // 字符串 --> 基本数据类型 12 int i1 = [string1 intValue]; // NSString --> int 13 float i2 = [string2 floatValue]; // NSString --> float 14 double i3 = [string3 doubleValue]; // NSString --> double 15 unichar i4 = [string4 characterAtIndex:0]; // 取字符
5.字符串大小写转换
1 NSString *tmpStr1 = [str1 uppercaseString]; // 小写 --> 大写 2 NSString *tmpStr2 = [str1 lowercaseString]; // 大写 --> 小写 3 NSString *tmpStr3 = [str1 capitalizedString]; // 首字母大写
6.字符串重组 -- (这里面的重组都会重新创建生成新的字符串)
1 // 重组字符串 2 int year = 1990; 3 int month = 9; 4 int day = 8; 5 NSString *date = [NSString stringWithFormat:@"%d-0%d-0%d", year, month, day]; 6 // 拼接字符 7 NSString *s1 = [date stringByAppendingString:@"com"]; // 追加"com" 8 NSString *s2 = [date stringByAppendingPathComponent:@"com"]; // 追加"/com" 9 NSString *s3 = [date stringByReplacingCharactersInRange:NSMakeRange(2, 3) withString:@"abcd"]; // 在index下标处插入,覆盖后面length个字符 10 // 字符替换 11 NSString *s4 = [date stringByReplacingOccurrencesOfString:@"-" withString:@" "]; // 将"-"换成" "
7.字符串操作文件
1 NSString *writeContent = @"1949年10月1日,中华人民共和国成立啦!"; 2 NSString *path = @"/User/apple/Desktop/myTest.txt"; // 文件路径 3 // 保存文件,写文件 4 NSError *writeError = nil; 5 BOOL isWriteSuccess = [writeContent writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&writeError]; 6 if (isWriteSuccess) { 7 NSLog(@"文件写入成功"); 8 } else { 9 NSLog(@"writeError = %@", writeError); 10 } 11 // 读取文件 12 NSError *readError = nil; 13 NSString *readContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&readError]; 14 if (readError == nil) { 15 NSLog(@"readContent = %@", readContent); 16 } else { 17 NSLog(@"readError = %@", readError); 18 }
二、NSMutableString(可变字符串)
1 // 1.创建 2 NSMutableString *muStr1 = [[NSMutableString alloc] init]; 3 NSMutableString *muStr2 = [[NSMutableString alloc] initWithCapacity:0]; // 字符串长度为0,但是可变 4 NSMutableString *muStr3 = [NSMutableString string]; 5 6 // 2.设置字符串的内容(重置) 7 [muStr2 setString:@"abcdefg"]; 8 9 // 3.可变字符串的操作(这些不会重新创建新的字符串) 10 // 追加 11 [muStr1 appendString:@"wer"]; 12 [muStr1 appendFormat:@"%@", muStr2]; 13 // 插入 14 [muStr1 insertString:@"werrtyuirtyu" atIndex:3]; // 在index下标处插入 15 // 删除 16 [muStr1 deleteCharactersInRange:NSMakeRange(2, 4)]; // 从index处开始删除length个长度字符 17 // 替换 18 [muStr1 replaceCharactersInRange:NSMakeRange(2, 4) withString:@"Frank"]; // 将index处开始到length个长度的字符换成"Frank"
第二部分:NSNumber(基本数据类型包装类)
1 // 1.包装基本数据类型 2 int a1 = 12; 3 float a2 = 13.23; 4 BOOL a3 = YES; 5 char a4 = 'A'; 6 double a5 = 12.0002; 7 NSInteger a6 = 19; 8 NSNumber *num1 = [NSNumber numberWithInt:a1]; 9 NSNumber *num2 = [NSNumber numberWithFloat:a2]; 10 NSNumber *num3 = [NSNumber numberWithBool:a3]; 11 NSNumber *num4 = [NSNumber numberWithChar:a4]; 12 NSNumber *num5 = [NSNumber numberWithDouble:a5]; 13 NSNumber *num6 = [NSNumber numberWithInteger:a6]; 14 15 // 2.NSNumber ---> NSString 16 NSString *nunString = [num1 stringValue]; 17 18 // 3.NSNumber ---> 基本数据类型 19 int b1 = [num1 intValue]; 20 float b2 = [num2 floatValue]; 21 BOOL b3 = [num3 boolValue]; 22 char b4 = [num4 charValue]; 23 double b5 = [num5 doubleValue]; 24 NSInteger b6 = [num6 integerValue];
第三部分:数组
一、NSArray(不可变数组)
1.数组的创建
1 // 1)对象方法 2 NSArray *array1 = [[NSArray alloc] init]; 3 NSArray *array2 = [[NSArray alloc] initWithArray:array1]; 4 NSArray *array3 = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", nil]; 5 // 2)类方法 6 NSArray *array4 = [NSArray array]; 7 NSArray *array5 = [NSArray arrayWithArray:array1]; 8 NSArray *array6 = [NSArray arrayWithObjects:@"one", @"two", @"three", nil]; 9 // 3)最快捷的方法 10 NSArray *array7 = @[@"lidong", @"li", @"dong"];
总结:
1)数组只能存放对象类型,并且存放该对象对象的地址
2)数组如果需要存放基本数据类型,必须先将基本数据类型包装起来
3)在利用数组初始化方法给数组赋值时,必须以nil为结束标志符;这也就说明,如果数组中间存入对象为nil时,会造成数据丢失
2.从数组中取元素
1 NSArray *arr1 = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", nil]; 2 // 1)下标法 3 NSString *str0 = arr1[0]; 4 // 2)通过方法取 5 NSString *str1 = [arr1 objectAtIndex:1]; 6 // 3)取首元素 7 NSString *str3 = [arr1 firstObject]; 8 // 4)取最后一个元素 9 NSString *str4 = [arr1 lastObject]; 10 // 5)从数组中提取部分元素 11 NSArray *subArr1 = [arr1 subarrayWithRange:NSMakeRange(0, 2)]; 12 // 6)根据下标集合取出部分元素 13 NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; 14 [indexes addIndex:0]; 15 [indexes addIndex:2]; 16 NSArray *subArr2 = [arr1 objectsAtIndexes:indexes]; 17 // 7)通过数组中的元素获取下标 18 NSUInteger index = [arr1 indexOfObject:@"one"];
3.获取数组中元素个数
1 NSArray *arr2 = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", nil]; 2 NSUInteger count1 = [arr2 count]; 3 NSUInteger count2 = arr2.count;
4.判断数组中是否存在某个对象
1 NSArray *arr3 = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", nil]; 2 BOOL isContain = [arr3 containsObject:@"one"];
5.循环遍历数组
1 NSArray *dataArray = @[@"I", @"am", @"a", @"student"]; 2 // 1)下标法 3 for (int i = 0; i < dataArray.count; i++) { 4 NSString *sonString = dataArray[i]; 5 NSLog(@"sonString = %@", sonString); 6 } 7 // 2)枚举器法 8 // a.正向遍历 9 NSEnumerator *enumerator1 = [dataArray objectEnumerator]; // 数组生成正向枚举器 10 id obj1 = nil; // 因为不清楚数组里存放的是什么类型的对象,所以只能使用泛型指针接收 11 while (obj1 = [enumerator1 nextObject]) { 12 NSLog(@"obj1 = %@", obj1); 13 } 14 // b.反向遍历 15 NSEnumerator *enumerator2 = [dataArray reverseObjectEnumerator]; // 数组生成反向枚举器 16 id obj2 = nil; 17 while (obj2 = [enumerator2 nextObject]) { 18 NSLog(@"obj2 = %@", obj2); 19 } 20 // 3)快速枚举法 21 for (id obj3 in dataArray) { 22 NSLog(@"obj3 = %@", obj3); 23 }
6.数组排序
1 // 1)使用sortedArrayUsingSelector 2 // 升序排列 3 NSArray *dataArray1 = @[@"b", @"a", @"e", @"w", @"p"]; 4 dataArray1 = [dataArray1 sortedArrayUsingSelector:@selector(compare:)]; 5 NSLog(@"排序后:%@", dataArray1); 6 7 // 2)使用block 8 NSArray *dataArray2 = @[@"4", @"a", @"9", @"w", @"p"]; 9 // 升序 10 dataArray2 = [dataArray2 sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { 11 return [obj1 compare:obj2]; 12 }]; 13 NSLog(@"升序排列后:%@", dataArray2); 14 // 降序 15 dataArray2 = [dataArray2 sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { 16 return [obj2 compare:obj1]; 17 }]; 18 NSLog(@"降序排列后:%@", dataArray2); 19 20 // 3)对自定义对象进行排序 21 Student *xiaoguan = [[Student alloc] initWithName:@"fuguanlin" andAge:13 andYear:@"2002"]; 22 Student *xiaodian = [[Student alloc] initWithName:@"zhangdian" andAge:14 andYear:@"2001"]; 23 Student *xiaosong = [[Student alloc] initWithName:@"mengjingsong" andAge:12 andYear:@"2003"]; 24 Student *xiaosu = [[Student alloc] initWithName:@"suyifan" andAge:13 andYear:@"2003"]; 25 Student *xiaohao = [[Student alloc] initWithName:@"qiyuhao" andAge:10 andYear:@"2005"]; 26 // a.按照某一个字段或是某几个字段排序 27 NSArray *dataArray3 = @[xiaoguan, xiaodian, xiaosong, xiaosu, xiaohao]; 28 NSSortDescriptor *descriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]; // 按照age升序 29 NSSortDescriptor *descriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:NO]; // 按照year降序 30 dataArray3 = [dataArray3 sortedArrayUsingDescriptors:@[descriptor1, descriptor2]]; 31 NSLog(@"按照age升序,year降序排列后:%@", dataArray3); 32 // b.按照某一个字段排序 33 NSArray *dataArray4 = @[xiaoguan, xiaodian, xiaosong, xiaosu, xiaohao]; 34 dataArray4 = [dataArray4 sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { 35 Student *student1 = obj1; 36 Student *student2 = obj2; 37 return [student1.year compare:student2.year]; // 字符串的方法 38 }]; 39 NSLog(@"按照year升序排列后:%@", dataArray3);
二、NSMutableArray(可变数组)
1.数组的创建
1 // 1)对象方法 2 NSMutableArray *array1 = [[NSMutableArray alloc] initWithCapacity:0]; 3 NSMutableArray *array2 = [[NSMutableArray alloc] initWithArray:array1]; 4 NSMutableArray *array3 = [[NSMutableArray alloc] initWithObjects:@"baocun", @"jingai", @"lid", @"zhangxi", nil]; 5 // 2)类方法 6 NSMutableArray *array4 = [NSMutableArray array]; 7 NSMutableArray *array5 = [NSMutableArray arrayWithArray:array1]; 8 NSMutableArray *array6 = [NSMutableArray arrayWithCapacity:0]; 9 NSMutableArray *array7 = [NSMutableArray arrayWithObjects:@"baocun", @"jingai", @"lid", @"zhangxi", nil];
2.可变数组的常用方法 --- 增删改
1 NSMutableArray *dataArray = [NSMutableArray arrayWithObjects:@"baocun", @"jingai", @"lid", @"zhangxi", @"a1", @"jianjun", nil]; 2 NSArray *array = @[@"liujie", @"luoyi", @"lvhui"]; 3 NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; 4 [indexes addIndex:0]; 5 [indexes addIndex:2]; 6 [indexes addIndex:3]; 7 8 // 1)增 9 // 追加 10 [dataArray addObject:@"a2"]; // 追加一个元素 11 [dataArray addObjectsFromArray:array]; // 追加一个数组的内容 12 // 插入 13 [dataArray insertObject:@"xxx" atIndex:0]; // 在指定下标插入指定元素 14 [dataArray insertObjects:array atIndexes:indexes]; // 在指定下标集处插入指定数组元素 15 16 // 2)删 17 // 删除指定元素(删除该数组中所有相同的指定元素) 18 [dataArray removeObject:@"xxx"]; 19 // 通过下标删除元素 20 [dataArray removeObjectAtIndex:0]; 21 // 删除最后一个元素 22 [dataArray removeLastObject]; 23 // 删除所有 24 [dataArray removeAllObjects]; 25 // 删除某一范围内的元素 26 [dataArray removeObjectsInRange:NSMakeRange(2, 2)]; 27 // 删除某一下标集合所对应的元素 28 [dataArray removeObjectsAtIndexes:indexes]; 29 // 删除参考数组里的元素(删除两个数组里边共同元素) 30 [dataArray removeObjectsInArray:array]; 31 32 // 3)改 33 // 替换指定下标处的元素 34 [dataArray replaceObjectAtIndex:0 withObject:@"aaaa"]; 35 // 替换下标集所对应的所有元素 36 [dataArray replaceObjectsAtIndexes:indexes withObjects:array]; 37 // 替换某一范围内的所有元素为指定数组的元素 38 [dataArray replaceObjectsInRange:NSMakeRange(0, 3) withObjectsFromArray:array]; 39 // 替换某一范围内的所有元素为指定数组的指定范围内元素 40 [dataArray replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:array range:NSMakeRange(1, 2)]; 41 // 两元素对调 42 [dataArray exchangeObjectAtIndex:0 withObjectAtIndex:dataArray.count - 1];
3.数组与字符串
1 // 1)字符串分割 ---> 数组 2 // 这里分割不会改变远字符串的值,而是重新创建一个新的字符串 3 NSString *str1 = @"I #am a #student"; 4 // a.以空格和#组成的字符串去分割 5 NSArray *arr1 = [str1 componentsSeparatedByString:@" #"]; 6 // b.以字符集合中的字符去分割 7 // 以字符集合里的每一字符作为分隔符 8 // 若当前分隔符的下一字符也是分隔符时,产生空串(如果有两个分隔符连在一起就会产生空串) 9 NSCharacterSet *charcaterSet = [NSCharacterSet characterSetWithCharactersInString:@" #"]; 10 NSArray *arr2 = [str1 componentsSeparatedByCharactersInSet:charcaterSet]; 11 12 // 2)数组拼接 ----> 字符串 13 NSArray *arr3 = @[@"I", @"am", @"a", @"student"]; 14 NSString *str2 = [arr3 componentsJoinedByString:@" "]; // 以空格为拼接符
第四部分:字典
一、NSDictionary(不可变字典)
1.创建
1 // 1)类方法 2 NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"lidong", @"name", @25, @"age", nil]; 3 NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:@[@"lidong", @25] forKeys:@[@"name", @"age"]]; 4 NSDictionary *dic3 = [NSDictionary dictionaryWithDictionary:dic1]; 5 // 2)对象方法 6 NSDictionary *dic4 = [[NSDictionary alloc] initWithObjectsAndKeys:@"lidong", @"name", @25, @"age", nil]; 7 NSDictionary *dic5 = [[NSDictionary alloc] initWithObjects:@[@"lidong", @25] forKeys:@[@"name", @"age"]]; 8 NSDictionary *dic6 = [[NSDictionary alloc] initWithDictionary:dic1]; 9 // 3)快捷创建(key : value) 10 NSDictionary *dic7 = @{@"name":@"lidong", @"age":@25};
总结:
1)字典中的key必须是字符串类型,而value可以是任意的对象类型
2)对于同一个字典,不允许存储相同的key(key作为字典中value的唯一标识)
3)字典中的元素不是按照初始化的顺序存放,而是按照存取速度最快的方式存储,所以对于字典不讨论按下标取值
2.NSDictionary的常用方法
1 NSDictionary *dic8 = @{@"one":@"1", @"two":@"2", @"three":@"3", @"four":@"4", @"five":@"5", @"一":@"1"}; 2 // 1)获取键值对的个数 3 NSUInteger count1 = [dic8 count]; 4 NSUInteger count2 = dic8.count; 5 6 // 2)获取字典的value 7 // 通过方法 8 id value1 = [dic8 objectForKey:@"2"]; 9 // 通过key 10 id value2 = dic8[@"one"]; 11 // 获取所有的value 12 NSArray *allValues = [dic8 allValues]; 13 14 // 3)获取字典的key 15 // 通过所有指定相同value所对应的所有key 16 NSArray *allKeys1 = [dic8 allKeysForObject:@"1"]; 17 // 获取所有的key 18 NSArray *allKeys2 = [dic8 allKeys]; 19 20 // 4)遍历字典 -- 枚举器法 21 // 遍历value 22 NSEnumerator *enumerator1 = [dic8 objectEnumerator]; 23 id value = nil; 24 while (value = [enumerator1 nextObject]) { 25 NSLog(@"value = %@", value); 26 } 27 // 遍历key 28 NSEnumerator *enumerator2 = [dic8 keyEnumerator]; 29 NSString *key = nil; 30 while (key = [enumerator2 nextObject]) { 31 NSLog(@"key = %@, value = %@", key, dic8[key]); 32 }
二、NSDMutableDictionary(可变字典)
1 // 常用操作方法 -- 增删改 2 NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjects:@[@"lidong", @"boy", @25, @"19900908", @170, @100] forKeys:@[@"name", @"sex", @"age", @"year", @"height", @"weight"]]; 3 // 1.增(注意:当初始化字典中没有"academic"这个key时,才是增加;否则为修改当前字典当前key的value值) 4 [dict setObject:@"本科" forKey:@"academic"]; 5 // 2.删 6 // 1)根据指定的key,删除key-value对 7 [dict removeObjectForKey:@"name"]; 8 // 2)根据指定的数组key,删除多个key-value对 9 [dict removeObjectsForKeys:@[@"sex", @"age", @"year"]]; 10 // 3)删除所有 11 [dict removeAllObjects]; 12 // 3.改 13 // 1)字典重置 14 [dict setDictionary:@{@"name":@"baocun", @"age":@25, @"relationship":@"classmate"}]; 15 // 2)修改某一对key-value(只能修改value) 16 [dict setValue:@24 forKey:@"age"];
第五部分:集合
一、NSSet(不可变集合)
1 // 1.创建 2 NSString *str1 = @"one"; 3 NSString *str2 = @"two"; 4 NSString *str3 = @"three"; 5 NSSet *set = [[NSSet alloc] initWithObjects:str1, str2, str3, nil]; 6 7 // 2.元素的个数 8 NSUInteger count1 = [set count]; 9 NSUInteger count2 = set.count; 10 11 // 3.判断是否包含 12 BOOL isContains = [set containsObject:str3]; 13 if (isContains) { 14 NSLog(@"YES"); 15 } else { 16 NSLog(@"NO"); 17 } 18 19 // 4.遍历 20 NSEnumerator *enumerator = [set objectEnumerator]; 21 NSString *value = nil; 22 while (value = [enumerator nextObject]) { 23 NSLog(@"value = %@", value); 24 }
总结:
1)NSSet也是无序的
2)NSSet最重要的功能:NSSet中不能够存储重复的数据,可以用它来去除重复的值(去重)
二、NSMutableSet(可变集合)
1 NSString *str1 = @"one"; 2 NSString *str2 = @"two"; 3 NSString *str3 = @"three"; 4 NSString *str4 = @"four"; 5 NSArray *arr = [NSArray arrayWithObjects:str2, str3, str4, nil]; 6 7 // 1.创建一个可变集合 8 NSMutableSet *muSet = [[NSMutableSet alloc] init]; 9 10 // 2.常用方法 -- 增删查 11 // 1)增 12 [muSet addObject:str1]; // 增加一个对象 13 [muSet addObjectsFromArray:arr]; // 增加一个数组 14 // 2)删 15 [muSet removeObject:str1]; // 删除指定对象 16 [muSet removeAllObjects]; // 删除所有 17 // 3)查 18 NSEnumerator *enumerator = [muSet objectEnumerator]; 19 NSString *value = nil; 20 while (value = [enumerator nextObject]) { 21 NSLog(@"value = %@", value); 22 } 23 24 // 3.集合最重要的功能:去重 25 NSArray *array = @[@"lidong", @"18", @"18", @"lidong", @"boy", @"18"]; 26 // NSArray ---> NSSet 27 NSMutableSet *set = [NSMutableSet setWithArray:array];
第六部分:集合类的内存管理
总结:对于内存管理,不管是在ARC模式,还是MRC模式,我们都需要考虑其内存溢出问题。对于MRC是毋庸置疑的;而对于ARC,其实也存在内存溢出的问题。ARC模式下的集合类如果处理不当很容易造成内存溢出的问题。下面的关于数组在MRC和ARC两种模式下的内存管理就可以说明这一问题。
一、MRC模式
1 Person *p = [[Person alloc] init]; // retainCount = 1 2 NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0]; 3 4 // 当把对象存入到数组中时,数组会对该对象作一次retain操作 5 [array addObject:p]; // 对于对象p而言:[p retain]; 6 7 // 当将某一个对象从数组中移除,数组会对该对象作一次release操作 8 [array removeObject:p]; // 对于对象p而言:[p release]; 9 10 // 当清空数组时,数组会对其内部所有对象元素作一次release操作 11 [array removeAllObjects]; 12 13 // 当对数组对象执行release操作时,数组会对其内部所有对象元素作一次release操作 14 [array release]; 15 16 // [p release];
二、ARC模式
1 Person *p = [[Person alloc] init]; // 保存了一个对象p的强指针 2 NSMutableArray *array = [[NSMutableArray alloc] init]; 3 4 // 当把对象存入到数组中,数组会默认保存该对象的强指针 5 [array addObject:p]; 6 7 // 当将某一个对象从数组中移除时,数组会释放掉该对象的强指针 8 [array removeObject:p]; 9 10 // 当清空数组时,数组会释放其内部所有对象的强指针 11 [array removeAllObjects]; 12 13 // 当对数组指针销毁时,数组会释放其内部所有对象的强指针 14 array = nil; 15 16 // 销毁对象p 17 p = nil;
第七部分:二进制数据类型
一、NSData(不可变二进制数据)
1 // NSData与NSString之间的互相转化 2 // 1.NSString ---> NSData 3 NSString *str1 = @"Welcome to Shenzhen !"; 4 NSData *data = [str1 dataUsingEncoding:NSUTF8StringEncoding]; 5 6 // 2.NSString ---> NSData 7 NSString *str2 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
二、NSMutableData(可变二进制数据)
第八部分:NSDate(日期)
1 // 1.获取当前日期 2 NSDate *now = [NSDate date]; 3 // 模拟昨天日期(NSTimeInterval:本质就是double类型) 4 NSTimeInterval secondes = 24 * 60 * 60; 5 // 日期加上某一个秒数 6 NSDate *yesDay = [now addTimeInterval:-secondes]; 7 8 // 2.比较日期 9 // 判断两个日期是否相同 10 BOOL isEqual = [now isEqualToDate:yesDay]; 11 if (isEqual) { 12 NSLog(@"日期相同"); 13 } else { 14 NSLog(@"日期不相同"); 15 } 16 17 // 获取两个日期中比较早的日期 18 NSDate *earler = [yesDay earlierDate:now]; 19 NSLog(@"比较早的日期:%@", earler); 20 21 // 获取两个日期中比较玩的日期 22 NSDate *later = [yesDay laterDate:now]; 23 NSLog(@"比较晚的日期:%@", later); 24 25 // 3.NSDate ---> NSString 26 NSDate *date1 = [NSDate date]; 27 // 初始化日期格式对象 28 NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init]; 29 // 设置日期格式 30 [formatter1 setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; // 2016/01/07 31 // 把格式与我们的日期关联起来 32 NSString *dateStr1 = [formatter1 stringFromDate:date1]; 33 NSLog(@"dateStr1 = %@", dateStr1); 34 35 // 4.NSString ---> NSDate 36 NSString *dateStr2 = @"2016/01/07"; 37 NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init]; 38 // 设置格式 39 [formatter2 setDateFormat:@"yyyy/MM/dd"]; 40 // 设置时区 41 [formatter2 setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 42 NSDate *date2 = [formatter2 dateFromString:dateStr2]; 43 NSLog(@"date2 = %@", date2);
// 日期

浙公网安备 33010602011771号