GeekBand第二周Object-C~8.字符串处理
~认识字符串 NSString
·NSString是一个Unicode编码、16位字符的字符序列。
·NSString被定义为类,引用类型,拷贝时具有引用语义。
·初始化方法:字面量初始化、初始化器、工厂方法。
·NSString拥有横定性,所有的操作无法更改字符串本身,如有更改,都是返回值新的形式。
·NSString拥有共享机制,引用计数管理对其有特殊的管理规则。
~NSMutableString
·NSMutableString具有可变性,NSString具有恒定性。
·NSMutableString为NSString的子类。
·NSMutableString不具有共享机制,NSString具有共享机制。
·NSMutableString并不是原有内存上直接增长,而是重新分配一个更大或更小的缓存容量存放字符。
~缓存容量与增长
·字符串初始化后,会分配一个缓存容量capacity,其长度一般大于实际的字符数量
·当字符串增长时,如果实际需求大于capacity,其capacity会以二倍的方式指数增长。伴随的代价:
1.分配新的堆内存 2*capacity
2.将原来堆内存上的内容拷贝到新内存
3.释放原来堆内存
·最佳实践估计好capacity,预先分配好一定容量,避免以后capacity的增长。
~NSString常用操作
·NSString:
1.访问字符串:获取字符串字符、字符串长度、字面量、大小写特换。
2.查询字符串:定位子串、获取子串、是否包含子串、查询字符集。
3.其他操作:比较字符串、替换字符串。分解字符串。
·NSMutableString:
1.添加字符串
2.删除字符串
3.修改字符串
学习笔记:
1.NSString具有恒定性,NSMutableString具有可变性,但是后者是前者的子类,当后者赋值给前者的时候,前者会随着后者的改变而改变,可见这是一个OC的漏洞,具体实例如下:
//----------------NSMutableString的可变性------
NSMutableString *mustr1 = [NSMutableString stringWithString: @"Hello,World!"];
NSLog(@"mustr1:%p",mustr1);
NSMutableString *mustr2 = [NSMutableString stringWithString: @"Hello,World!"];
NSLog(@"mustr2:%p",mustr2);
NSString *str5=mustr1;
NSLog(@"str5:%@",str5);
[mustr1 appendString:@" Very Good!"];
NSLog(@"str5:%@",str5);