iOS 内存管理~非集合对象的copy和mutableCopy
来源:互联网 发布:空战 知乎 编辑:程序博客网 时间:2024/04/29 01:42
//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
一、非集合&不可变
系统非集合类对象指的是
NSString
,NSNumber
... 之类的对象。下面先看个非集合类immutable对象拷贝的例子NSString* str = @"test string";
NSString* strCy = [str copy];
NSMutableString* strMCy = [strCymutableCopy];
//! 打印输出
NSLog(@" str :%p %p", str, &str);
NSLog(@" strCy :%p %p", strCy, &strCy);
NSLog(@"strMCy :%p %p", strMCy, &strMCy);
//!
str :0x100001040 0x7fff5fbff7e8
strCy :0x100001040 0x7fff5fbff7e0
strMCy :0x1004002f0 0x7fff5fbff7d8
打印结果:
str和strCy的地址是相同的,所以进行了指针拷贝即浅拷贝
str和strMCy的地址是不同的,所以进行了内容拷贝即深拷贝
二、非集合&可变
//! Test 1
NSMutableString* str = [NSMutableString stringWithString:@"m1Str test"];
NSString* strCy = [str copy];
NSMutableString* mStrCy = [str copy];
NSMutableString* mStrMCy = [str mutableCopy];
NSLog(@" str :%p %p", str, &str);
NSLog(@" strCy :%p %p", strCy, &strCy);
NSLog(@" mStrCy :%p %p", mStrCy, &mStrCy);
NSLog(@"mStrMCy :%p %p", mStrMCy, &mStrMCy);
//!
str :0x100308bd0 0x7fff5fbff7e8
strCy :0xdea10af20184a5 0x7fff5fbff7e0
mStrCy :0xdea10af20184a5 0x7fff5fbff7d8
mStrMCy :0x100308df0 0x7fff5fbff7d0
//! Test 2
[mStrCy appendString:@"mstr append"]; // **Crash**
[str appendString:@" str "];
[mStrMCy appendString:@" mStrMCy "];
从Test 1可以看出非集合&可变对象无论是copy还是mutableCopy,都是内容拷贝深拷贝。
Test 2中会出现Crash,原因就是因为mStrCy虽然是可变对象,但是所对应的内容是copy而来的不可变对象。
三、非集合拷贝结论
从三个demo打印结果可以定论:
非集合 copy mutableCopy 不可变对象浅 深 可变对象深 深
谢谢!!!
- iOS 内存管理~非集合对象的copy和mutableCopy
- iOS 内存管理~集合对象的copy和mutableCopy
- 内存管理与copy和mutableCopy
- iOS copy和mutableCopy
- 集合对象的内存管理、copy概念
- 对象的copy&mutableCopy
- 对象的copy&mutableCopy
- 深入对象的copy和mutableCopy
- 134,Copy,MutableCopy的应用与内存管理
- iOS中copy和mutableCopy
- iOS copy mutableCopy 的实现
- iOS Copy 和 MutableCopy的区别 深浅拷贝的区别
- iOS Copy 和 MutableCopy的区别 深浅拷贝的区别
- iOS中copy和mutableCopy的详细分析
- <一>Copy和mutableCopy——iOS开发的疑惑
- <二>Copy和mutableCopy——iOS开发的疑惑
- 浅拷贝和深拷贝 iOS 的copy 以及 mutablecopy
- mutableCopy和copy的区别
- 如何解决error: failed to push some refs to 'xxx(远程库)'
- hdoj 6063(2017 Multi-University Training Contest
- 实验8 分析一个奇怪的程序
- 算法 第四版 2.1.18 可视轨迹
- PAT乙级1060. 爱丁顿数(25)
- iOS 内存管理~非集合对象的copy和mutableCopy
- HDU 1385Minimum Transport Cost 最短路输出路径
- html与css第四天
- java面试题:请说说MVC架构
- C#文件操作方法大全
- Java StringBuilder
- opencv计算图像的平均值和标准差
- Python学习day06 装饰器
- 360安全卫士hookport.sys简单逆向