Copy 和 mutableCopy

copy是什么?
  • Copy的字面意思是:“复制”、“拷贝”,是一个产生副本的过程。

copy的目的:
  • 在改变原有对象的时候,不会改变新对象的值
  • 常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件。

copy的特点:
  • 修改源文件的内容,不会影响副本文件;
  • 修改副本文件的内容,不会影响源文件。

OC中copy的作用是:
  • 利用一个源对象产生一个副本对象

OC中copy的特点:
  • 修改源对象的属性和行为,不会影响副本对象;
  • 修改副本对象的属性和行为,不会影响源对象。

如何使用copy功能?
  • 一个对象可以调用copy或mutableCopy方法来创建一个副本对象。
    • copy:创建的时不可变副本(如NSString、NSArray、NSDictionary)。
    • mutableCopy:创建的可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)。

使用copy功能的前提:
  • copy:
    需要遵守NSCopying协议,实现copyWithZone:方法.
    @protocol NSCopying
    - (id)copyWithZone:(NSZone *)zone;
    @end
  • mutableCopy:
    需要遵守NSMutableCopying协议,实现mutableCopyWithZone:方法
    @protocol NSMutableCopying
    - (id)mutableCopyWithZone:(NSZone *)zone; 
    @end

深复制和浅复制的区别:
  • 深复制(深拷贝/内容拷贝):
    • 本质:产生了新对象。
    • 特点:
      1、源对象和副本对象是不同的两个对象; 
      2、源对象引用计数器不变,副本对象计数器为1(因为是新产生的)。

  • 浅复制(浅拷贝/指针拷贝):
    • 本质:没有产生新对象。
    • 特点:
        1、源对象和副本对象是同一对象; 
        2、源对象(副本对象)引用计数器+1,相当于做一次retain操作。

posted on 2017-02-16 18:25  NSSong  阅读(220)  评论(0编辑  收藏  举报