iOS中copy的概念及用法

Copy&MutableCopy
使用copy和mutableCopy方法可以创建一个对象的副本。
copy
需要实现NSCopying协议
创建的是不可变副本(如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;
}

时间: 2024-12-28 08:31:22

iOS中copy的概念及用法的相关文章

iOS中手势的delaysTouchesBegan属性用法(挖坑)

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/css/cuteeditor.css);iOS中手势的delaysTouchesBegan属性用法(挖坑),布布扣,bubuko.com

iOS中的translucent和automaticallyAdjustsScrollViewInsets用法

iOS中的translucent和automaticallyAdjustsScrollViewInsets用法 关于这两个属性我长话短说 具体的可以更具具体情况来设置: translucent用法 automaticallyAdjustsScrollViewInsets用法 translucent用法 iOS7之后由于navigationBar.translucent默认是YES,原点在(0,0)点当设置NO的时候,原点坐标在(0,64)点 // 原点从(0,64)开始 self.navigat

OC中协议的概念以及用法

OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议),给他的实现类打上标记了,当然这个活在Java5.0之后,被注解替代了,因为注解就是为了此功能诞生的.协议就是定义了一组方法,然后让其他类去实现 下面来看代码:WithProtocol.h[objc]  view plaincopy 

iOS中多线程基本概念

进程与线程 什么是进程? 近程是指在系统中正在运行的一个应用程序. 每个近程之间是独立的,每个近程均运行在其专用且受保护的内存空间内. **可以通过“活动监视器”可以查看Mac系统中所有开启的进程. 什么是线程? 一个进程要想执行任务,必须得有线程(每一个进程至少要有一条线程). 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行. 线程的串行 一个线程中任务的执行是串行(顺序执行的) 如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务. 也就是说,在同一时间内

软件测试、ios中的测试概念以及步骤

软件测试: 软件测试的目标是应该服务于软件项目的目标,可以通过建议反馈使用更加高效的方法和工具,提升软件开发效率以及软件开发质量.同时还可以通过过一些手段,更早.更快.更多地发现缺陷,从容降低了这些缺陷带来的风险. 软件测试是为了消除更加多的bug,虽然没有能够消除彻底. 但是软件的质量不是通过软件测试,而是软件开发工程师决定的. 软件测试的好处: 1.测试可以对软件预防,然后反应给软件开发工程师,所以及时快速的找到错误. 2.对软件缺陷的检测. 软件测试的类型: 单元测试(Unit Tests

iOS中通过GCD实现多线程用法

GCD简介 GCD全称Grand Central Dispatch,可翻译为“牛逼的中枢调度器”. 纯C语言,提供了非常多强大的函数. GCD优势: GCD是苹果公司为多核的并行运算提出的解决方案. GCD会自动利用更多的CPU内核(比如双核.四核). GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程). 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码. 任务和队列 GCD中有2个核心概念 任务:执行什么操作. 队列:用来存放任务. GCD的使用就2个步骤 定制任

IOS 中block结构的简单用法

自从block出现之后,很多API都开始采用这样的结构,由此可见,block确实有许多优势存在,这里将一些简单用法总结如下: 一.如何声明一个block变量 我们通过^符号来声明block类型,形式如下: void (^myBlock)(); 其中第一个void是返回值,可以是任意类型,中间括号中^后面的是这个block变量的名字,我把它命名为myBlock,最后一个括号中是参数,如果多参数,可以写成如下样式: int (^myBlock)(int,int); 同样,你也可以给参数起名字: in

iOS中UIButton控件的用法及部分参数解释

在UI控件中UIButton是极其常用的一类控件,它的类对象创建与大多数UI控件使用实例方法init创建不同,通常使用类方法创建: + (id)buttonWithType:(UIButtonType)buttonType; 如果使用实例方法创建UIButton对象,如: UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 50)]; 对象的创建是没有任何问题的,但是当为这个button对象设置一

iOS 中三种定时器的用法NSTimer、CADisplayLink、GCD

一.NSTimer 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; TimerInterval : 执行之前等待的时间.比如设置成1.0,就代表1秒后执行方法 target : 需要执行方法的对象. selector : 需要执行的方法 repeats : 是否需要循环 2.