iOS开发 - 不用copy修饰的字符串属性什么情况下不安全

简介: iOS开发 - 不用copy修饰的字符串属性什么情况下不安全
+关注继续查看

大家都听知道,属性字符串要用copy来修饰,防止被改变。


但是什么情况下不用copy修饰会被改变呢?


博主先这么做:

NSMutableString *string = [NSMutableString stringWithFormat:@"hello world"];
self.haha = string;
NSLog(@"%@",self.haha);
string = @"hello world!";
NSLog(@"%@",self.haha);

打印结果:
2017-11-20 19:09:38.113780+0800 11[7686:418768] hello world
2017-11-20 19:09:38.113940+0800 11[7686:418768] hello world

其实并没有改变。但是,在self.haha = string;之后,self.haha和string的地址肯定一样,在string = @”hello world!”;之后,他们的地址就已经不一样了。所以这种普通的赋值不会引起属性的改变,即使赋值对象是可变字符串。


以上代码重新操作string能引起self.haha改变的操作并不多,博主核实有以下几种:

//    [string appendString:@"asjbdkabskjd"];
//    [string deleteCharactersInRange:NSMakeRange(0, 1)];
//    [string insertString:@" the" atIndex:5];
//    [string replaceCharactersInRange:NSMakeRange(0, 1) withString:@"?"];
//    [string setString:@"change"];
//    [string appendFormat:@"!"];

好奇的小伙伴们自己试试看,他们有一个共同点,那就是都是属于NSMutableString的方法,然后,不用copy修饰的字符串属性就变得不安全了。如果用NSString的方法来操作必须进行赋值才能改变,否则连可变字符串都不会改变,比如:

[string substringWithRange:NSMakeRange(0, 1)];
NSString *subString = [string substringWithRange:NSMakeRange(0, 1)];

若是不赋值给新的对象,NSString的方法不会引起NSMutableString值的改变,这也是博主上一篇博客里说到的问题,有兴趣可以看看上一篇说的什么。


细节决定成败,这里的知识点很简单,但是不小心的话很可能找不到问题所在,所以就拿出来大家一起分享下,喜欢的看管欢迎关注或加群讨论。

目录
相关文章
|
4月前
|
iOS开发
iOS 检测字符串中数字个数、特殊符号个数
iOS 检测字符串中数字个数、特殊符号个数
78 0
|
4月前
|
iOS开发
iOS 检测字符串中是否含有数字、特殊符号
iOS 检测字符串中是否含有数字、特殊符号
175 0
|
11月前
|
程序员 API iOS开发
iOS开发:字符串设置指定内容的文字颜色、文字大小、文字字体类型
在iOS开发过程中,会有一些为了提高APP的视觉效果而设置的特别一点的效果,比如一行文字需要自定义不同的颜色和文字大小,这就用到通过富文本来设置字符串的颜色、大小和文字类型。这篇博文我打算只介绍怎么设置指定内容的一些文字属性设置,如果之前看过我写的博文,就会发现有一篇类似介绍通过富文本来设置字符串内容的博文,但是那篇是综合性的,包括介绍button的,以及UItextfield的设置,所以在这里我只介绍怎么设置字符串指定位置的一些自定义设置的方法,如有不妥之处,欢迎指正。
438 0
|
机器学习/深度学习 API iOS开发
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
117 0
|
存储 自然语言处理 Java
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
195 0
|
自然语言处理 iOS开发
iOS小知识:本地化字符串指定参数顺序(应用于app内多语言切换)
iOS小知识:本地化字符串指定参数顺序(应用于app内多语言切换)
150 0
iOS小知识:本地化字符串指定参数顺序(应用于app内多语言切换)
|
存储 自然语言处理 文件存储
iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)
iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)
273 0
iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)
|
Android开发 iOS开发
iOS小知识:HTML字符串与富文本互转
iOS小知识:HTML字符串与富文本互转
888 0
iOS小知识:HTML字符串与富文本互转
|
存储 自然语言处理 文件存储
iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地化
iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地化
170 0
iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地化
|
API 开发工具 Android开发
iOS富文本使用指南: 1、封装富文本API,采用block实现链式编程 2、 超链接属性 3、HTML字符串与富文本互转
iOS富文本使用指南: 1、封装富文本API,采用block实现链式编程 2、 超链接属性 3、HTML字符串与富文本互转
177 0
iOS富文本使用指南: 1、封装富文本API,采用block实现链式编程 2、 超链接属性 3、HTML字符串与富文本互转
相关产品
云迁移中心
推荐文章
更多