首页 » IOS » iOS 内存管理~非集合对象的copy和mutableCopy

iOS 内存管理~非集合对象的copy和mutableCopy

原文 http://blog.csdn.net/shihuboke/article/details/77917962

2017-09-09 22:20:14阅读(524)

//联系人:石虎  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 不可变对象 浅  深  可变对象 深  深 


谢谢!!!

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示 »

按 Ctrl+D 键,
把本文加入收藏夹