A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

set/get方法中的NSString类型的实例变量在内存的常量区吗?

3 个回复

倒序浏览
首先  对象的实例变量 无论是什么类型的  都不会存储在常量区 ,有可能存储在常量区的,是指针所指的数据,可能是一个常量.
其次,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"];
回复 使用道具 举报
赞一个,很详细哦,学习了
回复 使用道具 举报
学习咯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马