ios 之copy

Copy & MutableCopy
使用copy或mutableCopy方法可以创建一个对象的副本
copy
需要实现NSCoppying协议
创建的是不可变副本(如NSString、NSArray、NSDictionary)
mutableCopy
需要先实现NSMutableCopying协议
创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)

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

深复制:
内容拷贝,源对象和副本指向的是不同的两个对象
源对象引用计数器不变,副本计数器设置为1
地址值改变

浅复制:
指针拷贝,源对象和副本指向的是同一个对象
对象的引用计数器+1,其实相当于做了一次retain操作
地址值不改变

只有不可变对象创建不可变副本(copy)才是浅复制,其他都是深复制
时间: 2024-12-23 13:43:13

ios 之copy的相关文章

ios对象copy的方法,要实现nscopy协议

ios对象copy的方法,要实现nscopy协议 by 伍雪颖 - (id)copyWithZone:(NSZone *)zone { RestEntity *copy = [[[self class] allocWithZone:zone] init]; copy.dishId = _dishId; return copy; } - (id)mutableCopyWithZone:(NSZone *)zone { RestEntity *copy = [RestEntity allocWith

iOS的Copy

对象是在堆中的,堆只负责内存空间的划分,这块内存空间并没有设置它的类型,任何类型的指针都可以指向这块地址,但在XCode中不兼容的类型会有黄色警告. copy方法创建一个对象的副本(通常会多开辟一块空间),但也有例外就是那些不可被改变的对象,比如NSString对象的copy方法,不会开辟新内存. mutableCopy方法常用在将一个不可变类型的对象创建为一个可变类型的副本.比如 NSString * str = @"hello"; NSMutableString * strM =

兼容Android 和 ios JavaScript copy paste

<!DOCTYPE html> <html> <head> <title>关于我们Frame</title> <meta charset="utf-8"> <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-sca

iOS中copy,retain,strong,assign,weak的区别以及使用

使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)使用copy: 对NSString使用retain: 对其他NSObject和其子类 assign就是简单的赋值,不更改引用计数,所以直接使用基础数据 copy是直接拷贝内容,成为一个新的对象. retain释放旧的对象,将旧对象的值赋给新的对象,并使新的对象的引用计数加1 retain是指针拷贝 copy是分配新的内存属于内容拷贝,在拷贝之前都会释放旧的对象 在ARC中

iOS中copy的概念及用法

Copy&MutableCopy 使用copy和mutableCopy方法可以创建一个对象的副本. copy 需要实现NSCopying协议 创建的是不可变副本(如NSString.NSArray.NSDictionary) mutableCopy 需要先实现NSMutableCopying协议 创建的是可变副本(如NSMutableString.NSMutableArray.NSMutableDictionary) copy的目的是建立副本,同时修改原始对象和副本不会互相干扰. 深复制&

iOS中copy和strong修饰变量的区别

大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢? 比如:@property (retain,nonatomic) NSString *rStr;@property (copy, nonatomic)   NSString *cStr; - (void)test:{    NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];    self.rStr   = m

iOS assign copy retain...含义

assign: 简单赋值,不更改索引计数 copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象,地址为0×1111,内容为@"STR" Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化 retain到另外一个NSString之 后,地址相同(建立一

Cisco ASA5500系列防火墙恢复IOS全过程

擦除防火墙配置的命令是write erase而不是erase flash!当ASA5510的flash被erase后,如何将新的IOS拷贝到5510内呢? 如下:1. 当flash被erase后设备会因为找不到启动文件而不断地重启Launching BootLoader-Default configuration file contains 1 entry.Searching / for images to boot.No images in /Error 15: File not found2

[转]在iOS项目中使用CorePlot框架

转载地址:http://blog.csdn.net/llfjfz/article/details/7849190#comments Core Plot是OS X和IOS下的一个开源图形库,它提供数据的可视化处理,就是画曲线图.柱状图和饼图等等.如何在项目中使用Core Plot的静态库呢?以下是几个步骤: 首先先去Google Code下载Core Plot图形库,网址 http://code.google.com/p/core-plot/ .目前该网址提供了CorePlot_1.0.zip下载