NSString创建方式
-
常量字符串
-
常量区中的字符串只要内容一致, 不会重复创建(如果创建多个内容一致的字符串对象,多个对象指向同一块存储空间)
NSString *str1 = @"lnj"; -
除此之外创建的字符串是堆区(alloc init,string开头的类工厂方法本质也是alloc init)
-
-
注意:一般情况下,只要是通过alloc或者类工厂方法创建的对象,每次都会在堆内存中开辟一块新的存储空间.堆区存储的字符串会重复创建相同的字符串内容。
但是如果是通过alloc的initWithString方法除外,因为这个方法是通过copy返回一个字符串对象给我们
而copy又分为深拷贝和浅拷贝,如果是深拷贝会创建一个新的对象,如果是浅拷贝不会创建一个新的对象,而是直接返回被拷贝的对象的地址给我们
//浅拷贝
NSString *str4 = [[NSString alloc]initWithString:@"ls"];
NSString *str44 = [[NSString alloc]initWithString:@"ls"];
NSLog(@"str4 = %p, str44 = %p", str4, str44);
NSMutableString
-
NSMutableString和NSString的区别
-
不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化
-
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改
-
NSString是不可变的, 里面的文字内容是不能进行修改的
-
NSMutableString是可变的, 里面的文字内容可以随时更改
-
NSMutableString能使用NSString的所有方法
-
-
@”lnj”这种方式创建的字符串始终是NSString,不是NSMutalbeString.所以下面的代码创建的还是NSString,此时使用可变字符串的函数,无法操作字符串。
NSMutalbeString *s1 = @”lnj”;
// 会报错
[strM insertString:@"my name is " atIndex:0];