Copy & MutableCopy

使用copy或mutableCopy方法可以创建一个对象的副本

copy

需要实现NSCoppying协议

创建的是不可变副本(如NSString、NSArray、NSDictionary)

mutableCopy

需要先实现NSMutableCopying协议

创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)

Copy的目的是建立副本,同时修改原始对象和复本不会互相干扰

深复制 & 潜复制

深复制:

内容拷贝,源对象和副本指向的是不同的两个对象

源对象引用计数器不变,副本计数器设置为1

浅复制:

指针拷贝,源对象和副本指向的是同一个对象

对象的引用计数器+1,其实相当于做了一次retain操作

只有不可变对象创建不可变副本(copy)才是浅复制,其他都是深复制

自定义对象的copyWithZone

- (id)copyWithZone:(NSZone *)zone

{

Person *p = [[[self class] allocWithZone:zone] init];

p.name = self.name;

p.age = self.age;

return p;

}

关于NSNumber & int NSInteger

Int 是在栈区的,效率高,速度快,可以放在方法内部使用

NSNumber是对象,在堆中的,自带了数值转换功能,效率差一些,方便KVC赋值

Q & A

时间: 2024-10-07 05:16:41

Copy & MutableCopy的相关文章

objective-c copy mutableCopy 拷贝对象

原来不是所有的对象都支持 copy 只有遵守NSCopying 协议的类才可以发送copy消息 只有遵守NSMutableCopying 协议的类才可以发送mutableCopy消息 假如发送了一个没有遵守上诉两协议而发送 copy或者 mutableCopy,那么就会发生异常 默认 nsobject没有遵守这两个协议 但是 copy和mutableCopy这两个方法是nsobject定义的 如果想自定义一下copy 那么就必须遵守NSCopying,并且实现 copyWithZone: 方法

NSString NSMutableString copy mutableCopy retain weak strong

NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str = @"Shaw"; NSString *str1 = @"Root"; // NSString *str1的意思是str1

copy&amp;mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)

本文来自 这里,原文作者微博MicroCai 概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制就是内容拷贝. 集合的浅复制 (shallow copy) 集合的浅复制有非常多种方法.当你进行浅复制时,会向原始的集合发送retain消息,引用计数加1,同时指针被拷贝到新的集合. 现在让我们看一些浅复制的例子: NSArray *shallowCop

iOS -copy&amp;mutableCopy

1.对于非容器对象(NSString) 不可变 (NSString) copy :浅复制,指针指向 mutableCopy:深复制,生成可变字符串对象 可变(NSMutableString) copy: 深复制,生成不可变字符串对象 mutableCopy :深复制,生成可变字符串对象 2.对于容器类对象 数组 不可变(NSArray) copy :浅复制,指针指向 mutableCopy:深复制,生成可变数组对象(但,数组中的对象没有进行处理的话,数组的中的对象是浅复制) 可变(NSMutab

iOS学习笔记-retain/assign/strong/weak/copy/mutablecopy/autorelease区别

readwrite:是可读可写特性,需要生成getter和setter方法:readonly是之都特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变时候使用:alloc 对象分配后引用计数为1retain 对象的引用计数+1 copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来对象计数不变assign:是赋值特性,setter方法将传入参数赋值给实例变量(一把钥匙,同进同出):用于基础数据类型:weak:由ARC引入的对象变量的属性,比assign多了一个

关于:1.指针与对象;2.深浅拷贝(复制);3.可变与不可变对象;4.copy与mutableCopy的一些理解

最近对深浅拷贝(复制)做了一些研究,在此将自己的理解写下来,希望对大家有所帮助.本人尚处在摸索阶段,希望各位予以指正. 本文包括如下方向的探索: 1.指针与对象: 2.深/浅拷贝(复制): 3.可变/不可变对象: 4.Objective-C中的copy与mutableCopy方法. 一.指针与对象 在初始学习编程的时候,对于绝大多数面向对象编程的语言,这都是个绕不开的重点与难点.非常惭愧的是对它的认识我一直是不够的,并且感觉这项技术有许多的内容可以挖掘.说这是面向对象编程的核心思想也不为过.很多

copy和mutableCopy详解

非容器对象: NSString NSMutableString 不可变对象复制: copy是指针复制(浅拷贝): mutableCopy就是对象复制(深拷贝). 可变对象复制: 都是深拷贝,但是copy返回的对象是不可变的. copy 浅copy,不会产生新的地址,两个指针指向同一地址 深copy,会产生新的地址,两个指针指向不同地址,并且copy 出来的对象是不可变的. mutableCopy 深copy,会产生新的地址,两个指针指向不同地址 深copy,会产生新的地址,两个指针指向不同地址

copy

1) 对于非容器类对象如NSString, NSNumber之类的而言 NSString *str1 = @"abc"; NSString *str2 = [str1 copy]; // 地址和Str1一样 NSString *str3 = [str1 mutableCopy]; // 地址和str1不同, 虽然是深拷贝,但无法修改str3内容(语法不通过) NSMutableString *str4 = [str1 copy]; // 地址和Str一样, 修改Str4会崩溃 NSMu

【iOS开发每日小笔记(五)】实测copy到底是个神马玩意

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论