初学iOS时候,发现有的代码通过self.xxx访问,有时通过_xxx访问,一直搞不清楚有什么区别。其实,通过self.xxx是对属性进行访问,本质是调用属性的setter方法,属性的引用计数器会+1;_xxx是直接对成员属性进行访问,是对指针的赋值,引用计数器没发生改变。下面,通过代码来看一下。 ...
分类:
其他好文 时间:
2016-08-24 14:21:13
阅读次数:
107
4.深拷贝和浅拷贝 (1)什么时候会用到拷贝函数 一个对象以值传递的方式传入函数(就是作为入参) 一个对象以值传递的方式从函数返回(就是作为返回值) 一个对象需要通过另外一个对象进行初始化 (2)是否应该自定义拷贝函数 如果不自己定义拷贝函数,那么编译器会自动生成一个默认的拷贝函数,这个拷贝函数就会 ...
分类:
编程语言 时间:
2016-08-24 11:19:20
阅读次数:
136
一、相关问题 我们知道,浅拷贝会引发重复释放,导致程序崩溃。而深拷贝虽不会出现上述问题,但是内存空间开销大。所以,有没有一种方法, 既节省空间,又不会造成程序崩溃呢? 二、写时拷贝技术 写时拷贝(Copy-on-write):如果有多个呼叫者同时要求相同资源,他们会共同取得相同的指标指向相同的资源, ...
分类:
其他好文 时间:
2016-08-11 17:22:47
阅读次数:
136
最近跟同事聊到javascript中的深拷贝和浅拷贝的问题,想跟大家分享一下。 首先值类型和引用类型的存储特征: a.值类型赋值的存储特点 1.就是将变量内的数据全部拷贝一份,存储给新的变量。 2.例如:var =123; var num2=num;表示变量中存储的数字是123,然后将数据拷贝一份, ...
分类:
其他好文 时间:
2016-08-07 16:44:45
阅读次数:
172
什么是深拷贝和浅拷贝 浅拷贝:就是指针的复制,拷贝的指针跟原指针指向内存中的同一个位置的对象。至于对象的引用计数值是否+1,就是看拷贝的指针赋给给的变量是Strong类型的,还是week类型的。 如果是 strong类型,那么被拷贝的对象的内存计数值会+1,如果赋值给了weak类型的变量,那么被拷贝 ...
分类:
移动开发 时间:
2016-08-05 13:38:29
阅读次数:
194
(1)所有数据都应该隐藏在所在的类的内部。 (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。 (3)尽量减少类的协议中的消息。 (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。 (5)不要把实现细节(例如放 ...
分类:
Web程序 时间:
2016-08-01 15:19:16
阅读次数:
157
理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型。 1、值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量。 例如:var num = 123 ;var num1=num; 表示变量中存储的数字是 123。然后将数据拷贝一份,就是将 123 拷贝 ...
分类:
编程语言 时间:
2016-08-01 01:47:13
阅读次数:
154
一、数组的深浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生。 var arr = ["One","Two","Three"]; var arrto ...
分类:
Web程序 时间:
2016-07-25 14:31:56
阅读次数:
236
原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式结构图 原型模式结构图 通俗来说:原型模式就是深拷贝和浅拷贝的实现。 浅拷贝 只实现了值拷贝,对于引用对象还是指向原来的对象。 父类实现clone方法,子类没有实现clone方法,其效果是浅拷贝 ...
分类:
编程语言 时间:
2016-07-21 19:24:17
阅读次数:
211
1.两个拷贝之间主要是用于对象之间的拷贝! 2.区别 没指针: 深拷贝和浅拷贝没什么区别; 有指针: 浅拷贝:即对象的默认拷贝函数,只是将指针的地址拷贝给对象,两个变量同时指向一个地址,这样在析构的时候必然会导致程序崩溃; 深拷贝:即要自定义拷贝函数,将指针new一段新内存保存起来;这样析构也不会崩 ...
分类:
其他好文 时间:
2016-07-16 06:42:05
阅读次数:
163