总结下我的理解:
strong weak是ARC引入的,strong相当于retain,但是对于有的类型,例如NSString,则使用strong相当于使用copy
这样直接用strong就可以直接处理retain和strong的情况了。
weak相当于assign,但是比后者多一点:对象被干掉时会将weak引用设为nil,而对nil发送消息都不会导致崩溃
否则weak引用为野指针,会出现...
分类:
其他好文 时间:
2015-01-06 21:42:46
阅读次数:
152
定义一个Person类
其实引用计数这个问题大家可以理解为租房子的问题, 如果有retain alloc 代表这个人租了这间大房子, 拿到了一把钥匙, 引用计数代表房子一共有的钥匙的数量, release代表退房归还钥匙
Person * p = [[Person alloc] init];//房东盖好了一间房子, 现在是房东一个人
//a...
分类:
其他好文 时间:
2015-01-02 14:44:25
阅读次数:
104
为了防止内存泄露,养成检测内存分配/释放是否成功的良好习惯:
1,动态分配内存的时候检测是否分配成功,如果不成功请返回友好提示~
2,释放内存的时候将释放后的内存指针指向NULL,以保证不能被访问~
因为释放内存后,系统只是回收了指针所指的内存,此时指针是一个野指针本身仍是合法的,(只有有些类似void*的指针了),访问野指针程序当然出现异常~!
例子1:malloc()和free...
分类:
其他好文 时间:
2014-12-26 11:09:29
阅读次数:
143
上次做项目的时候,因为将delegate声明成assign类型,导致了程序EXC_BAD_ACCESS异常。结果发现是assign与weak的最大区别
它们都是弱引用声明类型,最大的区别在那呢?
如果用weak声明的变量在栈中就会自动清空
如果用assign声明的变量在栈中可能不会自动赋值为nil,就会造成野指针错误!...
分类:
移动开发 时间:
2014-12-19 00:40:15
阅读次数:
159
Android C++框架层的引用计数技术C++中对指针的使用时很头疼的事情,一个是经常会忘记free 指针,造成内存泄露,另外一个就是野指针问题:访问已经free掉的指针。程序debug工作的相当大部分,都是花费在这。Android中通过引用计数来自动管理指针的生命周期,动态申请的内存将会在不再需...
分类:
移动开发 时间:
2014-12-09 00:17:57
阅读次数:
239
野指针,又称迷途指针,即指向“垃圾”内存的指针。此时指针指向的内存已被操作系统回收,程序已无法再访问。...
分类:
其他好文 时间:
2014-12-08 21:31:46
阅读次数:
172
C++语言定义中说,每一种指针类型都有一个特殊值----"空指针"。
空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数;而未初始化的指针则可能指向任何地方。
空指针不是野指针。每种指针类型都有一个空指针,而不同类型的空指针内部表示可能不尽相同。尽管程序员不必知道内部值,但编译器必须时刻明确需要哪种指针空指针,以便在需要时加以区分。...
分类:
其他好文 时间:
2014-12-08 21:24:16
阅读次数:
179
一、什么是空指针和野指针1.空指针1> 没有存储任何内存地址的指针就称为空指针(NULL指针)2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0。下面两个都是空指针:1 Student *s1 = NULL;2 3 Student *s2 = nil;2.野指针"野指针"不是NULL...
分类:
其他好文 时间:
2014-12-06 08:49:21
阅读次数:
164
浅拷贝浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如:char*str=(char*)malloc(100);char*str2=str;浅拷贝只是对对象的简单拷贝,让几个对象共用一片内存,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。...
分类:
其他好文 时间:
2014-11-29 20:10:57
阅读次数:
188
我们在程序运行的过程中,经常出现段错误、内存持续增大等,是C++显式内存管理存在的问题,主要归纳为以下几点:野指针:一些内存单元已经释放,但之前指向它的指针还在使用。重复释放:程序试图释放已经被释放过的内存单元。内存泄漏:没有释放不再使用的内存单元。缓冲区溢出:数组越界。不配对的new[]/dele...
分类:
编程语言 时间:
2014-11-28 20:02:28
阅读次数:
308