Date
Dec. 31st, 2024
 
2024年 12月 1日

Post: iOS 入门 015: copy 与 mutableCopy

iOS 入门 015: copy 与 mutableCopy

Published 12:04 Apr 16, 2012.

Created by @ezra. Categorized in #Programming, and tagged as #iOS.

Source format: Markdown

Table of Content

copy 与 mutableCopy

普通对象的拷贝

  • copy的目的是在修改原始版本和副本的时候,彼此各不干扰

  • copy拷贝为不可变对象

  • mutableCopy拷贝为可变对象

源对象 方式 操作 类型
不可变 copy 引用计数+1 浅拷贝,指针拷贝
mutableCopy 新建副本 深拷贝,对象拷贝
可变 copy
mutableCopy
  • @property (nonatomic, copy) NSString *str;

  • 给copy属性设置数值时,默认会做一次copy操作,拷贝出不可变的版本

    • 目标值是可变的,会建立一个不可变的副本

    • 目标值是不可变的,只是引用计数+1,于strong等效

  • 在OC中,对象真正的类型是实例化对象的时候,所采用的类型决定的

自定义对象的拷贝

  • 在很多第三方框架或者大型的应用程序中,会给自定义对象提供copy方法,方便快速建立类似的副本

  • 自定义对象要支持copy方法,需要做两件事

    • 遵守<NSCopying>协议

    • 实现copyWithZone方法

Zone

  • 空间,在非常底层才会使用,给对象分配内存空间的时候,是在堆中的

  • Zone是如果程序员希望堆中的分配空间相对连续,或者集中才会使用

  • 目的是为了减少对中的内存碎片,一般程序开发不需要,也完全没有必要关心

  • copy方法,最终会调用到copyWithZone方法

Pinned Message
HOTODOGO
The Founder and CEO of Infeca Technology.
Developer, Designer, Blogger.
Big fan of Apple, Love of colour.
Feel free to contact me.
反曲点科技创始人和首席执行官。
开发、设计与写作皆为所长。
热爱苹果、钟情色彩。
随时恭候 垂询