黑马程序员技术交流社区
标题:
Foundation框架
[打印本页]
作者:
杨光0618
时间:
2016-8-29 23:44
标题:
Foundation框架
根据老师上课讲的,自己敲的笔记
Mark 01 Foundation框架
1.NSRange结构体变量
Foundation中定义的一个结构体
这个结构体变量用来表示一个范围,一般情况下,表示子串儿在主串儿中的范围
location : 起始下标
length: 匹配到的长度
NSRange结构体变量初始化
NSRange range;
range.location = 2;
range.length = 3;
NSRange range = {.location = 2,.length = 3};
NSRange range = {2,3};
NSRange range = NSMakeRange(2,3);
可以快速初始化结构体,也是最常用的方式
打印一个NSRange结构体变量
Foundation框架提供了一个打印NSRange结构体变量的函数
NSStringFromRange(NSRange);
NSString *str = NSStringFromRange(range);
2.字符串截取
NSString *str = “demo”;
[str substringFromIndex:(2)];
从下标为2的字符串开始截取
[str substringToIndex:(2)];
截取指定长度的字符串
[str substringWithRange:(NSRange)range];
截取指定范围的字符串,使用NSRange变量来确定下标位置和长度
3.字符串的替换
NSString *str = @“很爱很爱你”;
stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
str = [str stringByReplacingOccurrencesOfString:@“爱" withString:@“恨”];
将目标字符串替换为要替换的字符串
4.字符串类型转换
NSString *str = @“100”;
[str intValue];
[str doubleValue];
将字符串类型转换为其它数据类型
从头开始,能转多少转多少,如果是字符串开头,那么转出来结果为0
5.字符串的其他常用方法
Mark 02 NSMutableString
1.从NSString父类继承
NSString类型的字符串不可更改
但NSMutableString创建的对象具有可变性
所以创建的字符串对象可以更改
2.NSMutableString对象的创建
NSMutableString *str = @“k=jack”;
上边这种写法是错误的
[str appendString:@“jack”];
正确的
追加一个jack到str里
int num = 19;
[str appendFormat:@“haha%dhaha”,num];
把19拼接到haha19haha中
并且追加到str里
NSMutableString在拼接字符串时,效率要高很多倍
3.NSMutableString用途
NSString:效率高,不拼接的时候,同一个字符串对象,如果后边还要用,就不用再创建了,拼接效率低
NSMutableString:只要alloc new都是一个新对象,大批量(超过7次的拼接)拼接的时候效率
4.在使用NSString的地方也可以使用NSMutableString,因为NSMutableString继承自NSString
5.将可变字符串对象转换为不可变字符串对象
调用对象的copy方法
Mark 03 NSArray
1.NSArray是OC中的一个类,是数组
NSArray数组中只能存储OC对象,非OC对象无法存储
长度固定
NSArray数组中的每一个元素都是连续的,有下标索引
NSArray数组的元素的类型是id类型的
2.NSArray创建对象的方法
NSArray *arr = [NSArray new];
这种创建没有意义,因为元素为0个
NSArray *arr = [NSArray arrayWithObjects:@“jack”,@“rose”,…………,nil];
最常用的方法
当所有元素写完毕之后,后边需要接一个nil,nil在这里代表结束
可以存储任意的OC对象,但如果指针的值是nil,那么NSArray就会认为到此指针即结束
快捷创建NSArray对象的简写方式
NSArray *arr = @[@“jack”,@“rose”];
这种写法最后不需要加nil
3.取出存储在NSArray数组中的数据
使用%@可以直接输出NSArray数组中所有元素的值
如果存储的是中文,使用%@输出中文时,输出的是中文的Unicode编码
如果以下标的来取指定元素的值,这时中文可以正常取出
也可以调用数组对象的对象方法:objectAtIndex:(NSUInteger);
4.NSArray常用方法
得到数组的长度
[str count];
获取数组中指定下标的值
objectAtIndex:(NSUInteger)index;
若下标越界,运行必报错
判断数组中是否包含指定的元素
containsObject:(Objecttype)anObject
获取数组中首个元素和最后一个元素
[str firstObject];
[str lastObject];
若是使用这个方法获取首个或末尾的元素,不会出现空数组str[0]报错这样的错误
查找指定元素第一次出现的下标
indexOfObject:(ObjectType)anObject;
5.NSArray数据的遍历
普通for循环遍历
for in 循环遍历
for (NSString *str in arr)
{
NSLog(@"%@",str);
}
在这里str叫做迭代变量
执行原理
将数组中第0个元素的值赋值给迭代变量,然后执行循环体
...
...
将数组中最后一个元素赋值给迭代变量,然后执行循环体后自动结束循环
如果数组内存储的数据类型不同的话,()内的NSString数据类型建议使用id
block遍历数组
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"arr[%lu] = %@",idx,obj);
//obj:遍历出来的这个元素的值
//idx:遍历出来的这个元素的下标
//stop:如果想要停止遍历,就给这个stop指针指向的变量赋值为YES
if (idx == 2) {
*stop = YES;
}
}];
NSString *str = [arr componentsJoinedByString:@"-"];
以”-“来拼接字符串
NSArray *arr1 = [str componentsSeparatedByString:@","];
以”,”来分割一个字符串
6.NSMutableArray
可变数组
继承自NSArray
NSMutableArray *marr = @[@“jack”,@“rose”,…];
这种写法是错误的
添加元素
addObject:(ObjectType)
向可变数组中添加一个元素
addObjectsFromArray:(NSArray)Array;
从一个存在的数组中添加元素
移除元素
- (void)removeAllObjects;
删除所有元素
- (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;
删除指定范围下标的元素
- (void)removeObject:(ObjectType)anObject;
删除一个元素
- (void)removeObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;
- (void)removeObjectIdenticalTo:(ObjectType)anObject;
- (void)removeObjectsFromIndices:(NSUInteger *)indices numIndices:(NSUInteger)cnt NS_DEPRECATED(10_0, 10_6, 2_0, 4_0);
- (void)removeObjectsInArray:(NSArray<ObjectType> *)otherArray;
- (void)removeObjectsInRange:(NSRange)range;
7.数组的持久化
将数组中的所有元素存储到磁盘上的文件
一般写到plist文件中
Mark 04 键值对存储数据
1.NSDictionary(字典)
不可变字典数组
首先是个数组
其次是此键值对的形式来存储数据的
存储的数据只能是OC对象,别名只能是遵循了NSCopying协议的OC对象
存储的键值对是固定的,不能动态的新增和删除
创建一个字典数组
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"rose",@"name",@"18",@"age", nil];
NSLog(@"%@",dict);
最后必须用nil结尾
简要创建字典的方式
NSDictionary *dict1 = @
{
@"name":@"jack",
@"age":@"18",
@"height":@"178"
};
NSLog(@"dict1 = %@",dict1);
如何取出存储在字典中的数据
字典数组中的数据不能使用下标去取,只能使用key
dict[key值]
使用对象方法取值
[dict1 objectForKey:@"age”];
字典中的键值不能重复
遍历NSDictionary数组
for (id item in dict1)
{
NSLog(@"%@",dict1[item]);
}
[dict1 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop)
{
//key:键
//obj:值
//stop:停止遍历的条件
NSLog(@"%@ = %@",key,obj);
if ([key isEqualToString:@"height"])
{
*stop = YES;
}
}];
NSDictionary数组存储原理
存储时,根据key的值做一个hash算法,算出一个下标
然后把键值存储到字典数组中对应下标处
取值时,仍然根据key值做一个hash算法,算出这个key所在的下标然后取值
与NSArray区别
存储时,NSArray效率更好
全部取值时,NSArray效率同样更好
作者:
1358840521
时间:
2016-8-30 00:01
学习了,收藏
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2