`
blessdyb
  • 浏览: 237972 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Objective-C中Collections等类的深复制

阅读更多

        所有的开发语言中都会遇到对象的复制问题,通常复制分为浅复制与深复制两种。以Objective-C中的Collections为例,在我们复制一个Collections的具体对象时,比如一个NSArray的对象,我们使用-copy,这样的结果是一个浅层次的复制,在我们对于原对象进行了改动后,所有使用-copy得到的对象都会被改动,这是由于源对象与当前对象是共享一个对象值的。

        如果我们想达到深层次复制,Collections也为我们提供了一些方法。仍然以NSArray为例,我们使用-initWithArray:copyItems:就可以实现这种需求。

 

NSArray *original = [NSArray arrayWithObjects:@″Mimeoscope″, @″Cyclostyle″,nil];
NSArray *shallowCopy = [original copy];
NSArray *deepCopy = [[NSArray alloc] initWithArray:original copyItems:YES];
 

如上,shallowCopy, 与original指向的是同一个对象. 而deepCopy, 却是一个包含了original值的新的NSArray对象。这就完成了深复制。同样在The NSDictionary与 NSSet中也有相应的方式实现,分别为
–initWithDictionary:copyItems: 与 –initWithSet:copyItems: methods.

1
0
分享到:
评论
2 楼 ysongcn 2010-08-07  
http://www.techotopia.com/index.php/Copying_Objects_in_Objective-C

NSKeyedArchiver 压缩一下,再用UnArchiver 解一下

不知哪种好一些?

1 楼 ysongcn 2010-08-07  
copy后MutableString 会变成不可变的

相关推荐

    《Objective-C2.0程序设计(原书第2版)》_中文完整版

    在这一部分中,还涉及了函数、数组、结构体和指针等C语言元素,因为Objective-C建立在C语言之上,所以对这些基础概念的掌握对于学习Objective-C至关重要。 第二部分关注于Foundation框架的详细阐述。Foundation框架...

    iphone文档,大家共享

    在IT领域,尤其是在iOS开发中,NSObject作为所有Objective-C对象的根类,其重要性不言而喻。根据给定的文件信息,“iphone文档,大家共享”这一标题指向了一个共享资源,旨在帮助开发者深入理解NSObject及其协议引用...

    Swif tutoriais 入门经典

    同时,作为对比,书中还探讨了Swift与Objective-C语言的区别和联系,这有助于有Objective-C背景的开发者更好地过渡到Swift开发。 最后,书中还包含了Swift语言的快速参考部分,为读者提供了常用语法和API的快速查阅...

    最新 Swift3 语法

    - **主题覆盖**:本书涵盖了Swift3中的多个核心主题,包括内置集合类型、可选值、结构体与类、函数、字符串处理、错误处理、泛型和协议等。 - **术语定义**:书中会明确关键术语的定义,以便于理解上下文中的概念。 ...

    C ++ 11中的惰性流实现

    2. **Objective-C**:尽管这不是C++,但可能作为对比或借鉴的对象,因为Objective-C也有类似的消息传递机制,可能在讨论设计模式时被提及。 3. **C++**:是惰性流实现的主要语言,C++ 11的新特性在此起关键作用。 4....

Global site tag (gtag.js) - Google Analytics