黑马程序员技术交流社区
标题:
set/get方法中字符串在内存中的位置问题
[打印本页]
作者:
大爱五花肉
时间:
2016-2-15 16:30
标题:
set/get方法中字符串在内存中的位置问题
set/get方法中的NSString类型的实例变量在内存的常量区吗?
作者:
李天昊
时间:
2016-2-15 17:51
首先 对象的实例变量 无论是什么类型的 都不会存储在常量区 ,有可能存储在常量区的,是指针所指的数据,可能是一个常量.
其次,NSString的内容是否存储在常量区,与其是否在set/get方法中完全没关系.
当我们在一个类中声明了一个NSString类型的实例变量的时候 大致上都会这样写:
@property (copy,nonatomic) NSString *str;
这时 这个类所持有的实例变量 实际上是一个指针,一个指向不可变OC字符串NSString的指针,这个指针是存储在堆区中该实例化对象的存储区域的.
而这个指针所指向的NSString对象具体是存储在哪个区的 有两种情况:
1) 以下方法进行赋值,字符串存储在常量区:
str = @"string"; 或者 str = [NSString stringWithString:@"string"]; 或者 str = [[NSString alloc] initWithString:@"string"]; 这三种方法其实是一个意思, 在4.4版本之后写后两种方法,编译器会提示我们用第一种方法代替
2)以下方法进行赋值,字符串存储在堆区:
str = [NSString stringWithFormat:@"string"]; 或者str = [ [NSString alloc] initWithFormat:@"string"];
作者:
大爱五花肉
时间:
2016-2-15 19:24
赞一个,很详细哦,学习了
作者:
梦想家z
时间:
2016-2-16 13:43
学习咯
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2