NSString NSNumber NSDate NSArray
五、NSString
1.在C语言中,是没有专门的字符串类型,我们是通过字符数组来实现一个字符串。
2.在OC中专门的类型来描述字符串类型,NSString。
3.字符串比较特殊,遵循一个"不变模式",一个字符串一但创建,字符串对象就不可以改变,不可改变的字符串是可以重复使用的,所以相同值的字符串对象,一般只会创建一个对象。
4.有些字符串存在常量值中(代码区),有些字符串直接存在堆区。
5.字符串的使用
a.字符串创建
1)空字符串 NSString* str = [[NSString alloc]init];
2)字符串在创建的时候,如果已经存在,不会创建新的字符串。NSString* str = @"Hello";
NSString* str2 = @"Hello";
3)按指定格式来创建字符串
NSString* str3 = [NSString stringWithFormat:@"%@ World",str];
4)如果使用stringWithFormat方法创建的字符串,就算内容相同,地址也不一样。
5)通过文件内容创建字符串,注意存在编码集的问题,默认为ASC(不包含中文),要指定相应的中文编码集(GBK简体中文、GB2312简体中文、BIG5繁体中文、UTF8全世界主流语言…)
参数1 文件的路径
参数2 指定文件的编码集
参数3 出现异常处理
NSString* str7 = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/testString" encoding:NSUTF8StringEncoding error:nil]
b.字符串的比较 判断等值
1)str==str1 XXX
==只能判断两个字符串是否指向了同一个对象,(引用的地址是否相同)不能判断两个字符串的内容是否相同。
2)判断两个字符串值是否相同,isEqualToString方法,比较当前字符串与对应字符串值是否相同,严格区分大小写的。
c.比较字符串的大小
通常在字符串排序的时候,需要用到比较字符串的小。
1)compare方法可以比较两个字符串,比较字符串中的字符的ASC码的值
2)返回值有三种结果 NSComparetionResult
NSOrderedSame 两者相等 0
NSOrderedAscending后者比前者大 -1升序
NSOrderedDecending前者比后者大 1降序
d.忽略大小写比较字符串
1)caseInsensitiveCompare这个方法
2)在验证码功能的时候,会用到此方法
六、NSMutableString 可变字符串可以改变字符串内容的功能,它是NSString的子类。
1.初始化
a.空字符串 有意义
NSMutableString* str = [[NSMutableString alloc]init];
b.创建字面值 无意义
不建议用此方式创建可变字符串,字面值字符串的内容,在代码区是无法改变的
NSMutableString* str2 = @"abc";
2.修改字符串的内容
a.在指定位置 添加新的字符串
参数1 添加的字符串内容
参数2 添加的字符串在原字符串中的位置
注:下标是从0开始计算
[str3 insertString:@"123" atIndex:1];
b.可以替换指定位置的字符串
NSRange range={1,3};//位置,长度
[str3 replaceCharactersInRange:range withString:@"bcd"];
c.删除指定位置的字符串,后面的字符串会向前补齐
[str3 deleteCharactersInRange:range];
3.两个字符串对象的操作
a.追加字符串
[str4 appendString:@"bcd"];
b.按照指定格式追加字符串 str4 = abcbcd
[str4 appendFormat:@"123%@bcd",@"def”];
4.截取字符串
a.从指定下标开始,包含开始位置截取字符串
subStringFromIndex
从中间到最后
b.从0开始,到指定位置,不包含指定位置
subStringToIndex
从开始到中间
c.指定范围截取字符串
subStringWithRange
NSRange range = {location,length};
5.字符串大小写转换
a.将所有的字符串内容变为大写字母
uppercaseString
b.将所有的字符串内容变为小写字母
lowercaseString
c.将单词的首字母大写
capitalizedString
转换
6.得到字符串的前缀和后缀
TRStudent.h 前缀(TR)和后缀(.h)
如果一个字符串是文件名,那么可以得到这个字符串的前缀和后缀。
a.判断一个文件是否有某个前缀
BOOL b = [str hasPrefix:@"TR"];
b.判断一个文件是否有某个后缀
BOOL b = [str hasSuffix:@".h"];
一、NSNumber数值对象
在很多类使用的时候,如果使用数值,就需要将数值转换成对象类型,而基本数据类型是无法使用的,所以说我们就要封装基本数据类型变为对象类型,数值对象的常用处理方式和使用与基本数据类型无差别。
1.数字对象的初始化
//封装
int i = 10;//基本数据类型
//对象类型
NSNumber* number = [NSNumber numberWithInt:i];
2.数字对象转换为基本数据类型
//解封
int i2 =[number intValue];
二、NSValue
1.有时需要创建一个对象,以密切反应原始数据类型或者数据结构,这种情况就需要使用NSValue类,它可以将任何C中有效的变量类型封装成对象类型。
2.NSNumber是NSValue的子类
3.使用NSValue封装一个结构体
a.定义一个结构体类型
typedef struct _Point{
int x;
int y;
}Point2;
b.声明一个结构变量并且赋值
Point2 point;
point.x = 10;
point.y = 20;
c.通过NSValue类,将结构类型封装成NSValue对象
参数1 结构体变量的内存地址
参数2 内存地址对应的结构体类型
NSValue* value = [NSValue valueWithBytes:&point objCType:@encode(Point2)];
d.把结构体对象转换成结构体类型
Point2 point2;
[value getValue:&point2];
三、NSDate 日期
1.NSDate存储的是时间信息,默认存储的是世界标准时间(UTC),输出时需要根据时区转换为本地时间。中国大陆、香港、澳门、台湾…的时间增均与UTC时间差为+8,也就是UTC+8。
2.初始化 得到当前的时间
NSDate* date = [[NSDate alloc]init];
3.得到一个时间,和当前比延迟30秒
NSDate* date2 = [NSDate dateWithTimeIntervalSinceNow:30];
4.和时间对比 返回秒数
NSTimeInterval second = [date timeIntervalSince1970];
5.比较两个时间 哪个更早
NSDate* earlierDate = [date earlierDate:date2];
6.比较两个时间 哪个更晚
NSDate* laterDate = [date laterDate:date2];
7.将世界标准时间转换成当地时间
8.将UTC时间转换为当地时间
a.创建模板对象
NSDateFormatter* dateFormatter
=[[NSDateFormatter alloc]init];
//hh12小时制mm分钟ss秒 HH24小时制
//MM月dd日yyyy年
dateFormatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";
b.通过模板对象 将时间对象转换成字符串
NSString* strDate = [dateFormatter stringFromDate:date];
四、NSArray 数组1.概述
数组是一组有序的集合,通过索引下标取到数组中的各个元素,与字符串相同,数组也有可变数组(NSMutableArray)和不可变数组(NSArray),数组中不可以保存基本数据类型、结构体数据类型,需要使用NSNumber和NSValue进行数据"封装"。
2.初始化方法
a.空数组
NSArray* array = [NSArray array];
b.数组中只有一个元素
NSArray* array2 = [NSArray arrayWithObject:@"one"];
c.数组中有多个元素
NSArray* array3 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
2.初始化方法
d.通过一个已有的数组 创建新的数组
NSArray* array4 = [NSArray arrayWithArray:array3];
3.数组的常用方法
a.数组的长度
NSUInteger length = [array4 count];
b.通过数组的下标得到数组中元素
NSString* objStr = [array4 objectAtIndex:0];
3.数组的常用方法
c.遍历数组
for (int i = 0; i<[array4 count]; i++) {
NSString* str = [array4 objectAtIndex:i];
}