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);

你可能感兴趣的:(GeekBand第二周Object-C~8.字符串处理)