NSString,NSMutableString中常用的方法使用
#pragma makr - NSString的常用方法: /** 字符串创建: */ NSString *str0 = @"This is a string"; NSString *str1 = [[NSString alloc]init]; //创建一个空字符串,无实际意义,一般不用 NSString *str2 = [NSString stringWithFormat:@"%d",18]; //格式化创建 /** 字符串拼接: */ NSString *str3 = @"This is "; NSString *str4 = @"a string"; NSString *str5 = [str3 stringByAppendingString:str4]; //追加拼接 NSString *str6 = [str3 stringByAppendingFormat:@"%@,%d",str4,222]; //追加拼接特殊情况 NSString *str7 = [[NSString alloc]initWithFormat:@"%@%@",str3,str4]; //初始化拼接 /** 字符串截取: */ NSString *str8 = [str0 substringToIndex:4]; //输出字符串str4中的头部字符,截取到~为止 NSString *str9 = [str0 substringFromIndex:10]; //输出字符串的尾部字符,从~开始截取 NSRange r = {5,5}; //截取字符串中间的值,第4个字符开始,5表示子字符串的长度,从4开始截取,长度为5 NSString *str10 = [str0 substringWithRange:r];//截取字符串中间的值 /** 字符串替换: */ NSString *str11 = @"www.baidu.com"; NSRange r1 = {4,5}; NSString *str12 = [str11 stringByReplacingCharactersInRange:r1 withString:@"google"];//并不会改变原有的值,而是生成一个新的字符串 /** 字符串编码: */ NSString *str13 = [NSString stringWithContentsOfFile:@“此处为保存了字符串的目标文件地址” encoding:NSUTF8StringEncoding error:nil]; //将一个文件类的字符串拷贝到str13里面 #pragma makr - NSMutableString常用方法: /** 创建可变字符串 */ NSMutableString *str1 = [[NSMutableString alloc]init];//创建了一个空的可变字符串,有实际意义 //NSMutableString *str2 = @"This is a string"; //可变字符串不能直接赋值,会退化成字符串常量, NSMutableString *str3 = [NSMutableString stringWithString:@"sting"];//创建一个可变字符串并赋初值(标准方法) NSMutableString *str4 = [NSMutableString stringWithFormat:@"%d",23];//标准格式方法,将数字直接创建成字符串形式 NSMutableString *str5 = [NSMutableString stringWithCapacity:100];//创建一个空字符串,并预留一定字节的空间 /** 添加字符 */ [str5 appendString:@"string "]; NSLog(@"str5:%@",str5); [str5 appendFormat:@"has %d characters",5]; //可变字符串中,添加后在原有字符串上添加 NSLog(@"str5:%@",str5); //输出结果为:str5:string has 5 characters; /** 字符串删除: */ NSRange r = [str5 rangeOfString:@"has"];//将has开始的字符删除,长度为has的长度 NSLog(@"(%lu,%lu)",(unsigned long)r.location,(unsigned long)r.length); //注意!!!!!!!!!!!强制转化字符串类型 [str5 deleteCharactersInRange:r]; NSLog(@"str5:%@",str5); //输出结果为:str5:string 5 characters; /** 字符串替换 */ NSMutableString *str6 = [NSMutableString stringWithString:@"This is a string"]; NSRange r1 = [str6 rangeOfString:@"a"]; [str6 replaceCharactersInRange:r1 withString:@"another"]; NSLog(@"str6:%@",str6);
NSNumber
定义: 用于封装C语言的基本数据类型成为一个OC的类的对象
/** 封装 */ int i = 10; NSNumber *num0 = [NSNumber numberWithInt: i ]; NSNumber *num1 = @3;//封装简写 NSNumber *num2 = [NSNumber numberWithInt:10];//封装的时候可以直接简写 /** 拆封 */ int i2 = [num intValue];//得到拆封后的值 NSLog(@"i2:%d",i2); NSLog(@"i2:%d",[num intValue]);//拆封的时候也可以简写 //char,float,double,BOOL类型的封装与拆封方法同理
NSValue
定义: 创建一个对象来密切反应原始数据类型或者数据结构,可以将任何C中有效的变量类型封装成对象类型;
NSNumber是NSValue的子类
typedef struct _point{ int x ; int y ; } TRPoint; int main(int argc, const char * argv[]) { @autoreleasepool { /** 封装 */ TRPoint p = {3,4};//开辟一个结构体内存空间,并赋值 NSValue *value = [NSValue valueWithBytes:&p objCType:@encode(TRPoint)];//@encode(TRPoint)与@selector相类似 /** 拆封 */ TRPoint p2;//开辟一个新的结构体内存空间 [value getValue:&p2];//将堆中的数据放到栈中 NSLog(@"p2中x值为:%d ,y值为:%d ",p2.x,p2.y); } return 0; }
NSDate
定义: 用于处理日期和时间,默认储存的时世界标准时间(UTC),与中国时间相差为+8.
使用方法:
//获取世界标准时间: NSDate *date = [NSDate date];//此处需要注意是date(时间),而不是data(数据); NSLog(@"%@", date); //获取本地时间: NSTimeZone *zone = [NSTimeZone systemTimeZone]; NSInteger interval = [zone secondsFromGMTForDate:date]; NSDate *localDate = [date dateByAddingTimeInterval:interval]; NSLog(@"%@", localDate); //获取比当前时间快30秒的世界标准时间: //关键字:interval:间隔 NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:30];//正数表示在此时间之后(延迟多少秒,比当前时间快多少秒); NSLog(@"%@", date2); //获取自1970年1月1日0时到现在的总秒数 NSTimeInterval seconds = [date timeIntervalSince1970]; NSLog(@"%lf", seconds); //获取指定时间到现在的总秒数 NSDate *time = [NSDate dateWithTimeIntervalSinceNow:-60];//负数表示在此时间之前; NSTimeInterval seconds1 = [time timeIntervalSinceNow]; NSLog(@"%lf", seconds1); //获取两个指定时间之间的总秒数 NSDate *time1 = [NSDate dateWithTimeIntervalSinceNow:-60 * 60 * 24];//定义time1在此时间之前 NSDate *time2 = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24];//定义time2在此时间之后 NSTimeInterval seconds2 = [time1 timeIntervalSinceDate:time2]; NSLog(@"%lf", seconds2); //对比两个时间谁更早 NSDate *earlierDate = [time1 earlierDate:time2]; NSLog(@"%@", earlierDate);//earlier:更早得 //谁更晚 NSDate *laterDate = [time1 laterDate:time2]; NSLog(@"%@", laterDate);//later:晚一点的,迟一点的 //对比两个时间是否相同 if ([time1 isEqualToDate:time2] == YES) { NSLog(@"两个时间相同"); } else { NSLog(@"两个时间不同"); } //指定时间的输出格式 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];//formatter: 样式,格式, 定义一个空的时间模板(时间格式的对象); formatter.dateFormat = @"yyyy年MM月dd日 hh:mm:ss”;//自定义定义格式: hh:12小时制,HH:24小时制 NSString *strDate = [formatter stringFromDate:date]; NSLog(@"%@", strDate);
NSArray
定义: 数组是一组有序的集合,痛过索引下标取到数组中的各个元素,同样分为不可变数组(NSArray)与可变数组(NSMutableArray);
不能直接存放C语言的基本数据类型和结构体类型的变量,需要用NSNumber和NSValue进行数据封装和拆封;
使用方法:
//数组的创建: NSArray *array1 = [NSArray array];//创建一个空数组,没有实际意义 NSArray *array2 = [NSArray arrayWithObject:@"one"];//创建一个只有一个元素的数组,意义也不大; NSArray *array3 = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];//创建一个有多个元素的数组,并以nil结束; NSArray *array4 = @[@"one", @"two", @"three"];//简化后的创建一个有多个元素的数组 NSArray *array5 = [NSArray arrayWithArray:array4];//创建数组array4的副本 //求数组的长度(数组中的元素个数): NSUInteger length = [array5 count];//length:长度 NSLog(@"%lu", length); //通过下标,获取数组中的指定元素: NSString *objStr = [array5 objectAtIndex:0];//使用实例方法的方式 objStr = array5[1];//使用下标的方式 NSLog(@"%@", objStr); //求取数组的最后一个元素 objStr = [array5 lastObject]; NSLog(@"%@", objStr); //求取数组的第一个元素 objStr = [array5 firstObject]; NSLog(@"%@", objStr); //求一个数组元素在数组中的下标 NSUInteger index = [array5 indexOfObject:@"two"]; NSLog(@"%lu", index); index = [array5 indexOfObject:@"5"];//当元素不是数组中的元素时,得到的下标是垃圾值 NSLog(@"%lu", index); #pragma makr -数组的遍历: //第一种遍历 for (int i = 0; i<[sArray count]; i++) { TRStudent *obj = [sArray objectAtIndex:i]; NSLog(@"%@,%d",obj.name,obj.age); } //第二种遍历 for (TRStudent*obj in sArray) //数组特有的遍历 { NSLog(@"%@,%d",obj.name,obj.age); } //第三种 NSEnumerator *enu = [sArray objectEnumerator];//首先得到该容器的迭代器 TRStudent *stu = nil; while (stu = [enu nextObject]) { NSLog(@"%@,%d",stu.name,stu.age); } #pragma makr -数组的排序: //利用系统自带的compare对数组进行排序 NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@",sortedArray); //当自定义的数组array中全为int类型的时候,按照从整数从大到小顺序排列; //当array中既有int类型,又由char类型时,排序时,将字符类型的首字母的ASSIC值转换然后进行排序; NSArray *string = [NSArray arrayWithObjects:@"one",@"four",@"100",@"three”,nil]; NSLog(@"比较前:%@",string); //当自定义的数组string中为字符类型时候,按照每个成员的首字母进行排序,如果出现数字,则数字排最前面 NSArray *string1 = [string sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"比较后:%@",string1); //所以该句输出结果为:100,four,one,three; //自定义比较类容 //声明部分: -(NSComparisonResult)compareName:(TRStudent*)other; //固定格式,第一个下划线部分为比较内容,首字母大写; -(NSComparisonResult)compareAge:(TRStudent*)other; //compare:比较,result:结果,返回一个比较结果; 方法部分: -(NSComparisonResult)compareName:(TRStudent *)other { return [self.name compare:other.name]; //当字符串进行比较时,返回值为:字符串的首字母的排列方式,a到z依次排列; } -(NSComparisonResult)compareAge:(TRStudent *)other { if (self.age<other.age) return NSOrderedAscending; else if (self.age>other.age) return NSOrderedDescending; else return NSOrderedSame; } #pragma makr -数组的引用计数复制,和深拷贝复制: NSArray *copiedStudent = [[NSArray alloc]initWithArray:stu copyItems:NO];//当第二个参数值为NO时,数组中的所有元素仅将引用计数加了一个1 NSArray *copiedStudent1 = [[NSArray alloc]initWithArray:stu10 copyItems:YES]; //当第二个参数值为YES时,为深拷贝,即数组copiedStudent中的所有元素与数组stu中的所有元素各占各的存储空间, //当实现深拷贝的时候,必须遵守拷贝协议,重写-(id)copyWithZone:(NSZone *)zone方法; NSMutableArray //创建 NSMutableArray *array = [NSMutableArray array];//创建一个空的可变数组,有意义的,在后续程序中,可以向其中添加元素 NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:18];//创建一个预估空间的集合,目的是加快运行速度; NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", nil];//标准方法 //向可变数组中添加元素 [array addObject:@"one"]; //在数组的末尾添加一个元素 [array insertObject:@"four" atIndex:1]; [array insertObject:@"five" atIndex:4]; //下标越界会导致崩溃 //修改数组元素 [array replaceObjectAtIndex:0 withObject:@"aaa"]; //修改指定下标的数组元素,仅修改一个元素 NSMutableArray *replace = [NSMutableArray arrayWithObjects:@"six", @"seven", @"eight", nil]; NSRange r = {1, 2};//范围中1为开始的下标,2为连续的元素个数 [array replaceObjectsInRange:r withObjectsFromArray:replace]; //修改指定范围的数组元素,对多个数组元素进行修改 //删除数组元素 NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", nil]; [array4 removeLastObject]; //删除最后一个元素 [array4 removeObject:@"two"]; //删除指定对象,当删除不存在的对象时,什么情况都不会发生 [array4 removeObjectAtIndex:0]; //删除指定下标的数组元素,当下标不存在时,程序会崩溃 NSMutableArray *array5 = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil]; NSRange r1 = {1, 2};//1为要删除的数组元素开始的下标,2为从开始下标的连续2个元素 [array5 removeObjectsInRange:r1]; //删除指定范围的元素 NSMutableArray *del = [NSMutableArray arrayWithObjects:@"two", @"four", nil]; [array5 removeObjectsInArray:del]; //删除指定数组中的所有元素,删除多个元素 [array5 removeAllObjects]; //删除数组中的所有元素,即清空数组;