IOS开发-Foundation笔记

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];		//删除数组中的所有元素,即清空数组;

你可能感兴趣的:(NSString,NSArray,NSDate,NSMutableString,nsnumber,NSValue)