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开始截取,长度为5NSString *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.ageother.age) return NSOrderedDescending; else return NSOrderedSame;}#pragma makr -数组的引用计数复制,和深拷贝复制:NSArray *copiedStudent = [[NSArray alloc]initWithArray:stu copyItems:NO];//当第二个参数值为NO时,数组中的所有元素仅将引用计数加了一个1NSArray *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]; //删除数组中的所有元素,即清空数组;