黑马程序员技术交流社区

标题: 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