OC中的野指针(僵尸指针)
2024-10-19 02:24:05
涉及到内存管理问题的都是类类型的变量,而在OC中我们操纵这些对象都是通过操纵指向他们的指针来完成的,一致很多时候会忽略指针存在。比如定义UIView * view = [[UIView alloc]init];然后我们会使用view这个指针来做许多的操作。而由指针带来的一个性质是,当view == nil的时候,是指view这个指针没有指向任何地方,不能代表view指向地方的值是空的。同样当view不为nil的时候,值说明它指向了一个地方,而不能说明它指向的地方有值。僵尸指针就是这样情况,比如:
UIView * view1 = [[UIView alloc]init];
UIView * view2 = view1; //view1与view2 指向同一个对象内存地址
[view1 release]; //View1指向对象的引用计数为0,对象销毁
[view2 setxxx]; //view1与view2指向的对象此时已销毁,出现野指针,程序崩溃
如果view1 dealloc(销毁)了,内存没了,这时view2依然指向原来的地方,因为指针保存的是指向内存的地址,所以view2不是空的,但view2指向的地方是空的,这时view2就叫僵尸指针(看起来是“活的”,其实已经“死了”)。这时对view2做任何操作,就会程序崩溃。而且最糟糕的事情是,你好不能判断这时view2指向的地方是否内存释放了,因为你根本就不能调用view2。所以除了内存管理上做好之外,还有一个要注意的是释放掉一个内存后,如果这个指针还需要,要么赋新值,要么给个nil。
最新文章
- 惩罚因子(penalty term)与损失函数(loss function)
- AMD PerfStudio
- [shell基础]——paste命令
- 动态获取爱奇艺上传视频mp4格式url地址
- Poj 2232 Moo Volume(排序)
- JAX-WS创建和处理SOAP消息
- C#中的系统时间获取问题
- vector 遍历
- python pdb 调试
- JavaFile I/O
- oracle xe在centos下的安装(更)
- 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数
- 多线程中实现ApplicationContextAware接口获取需要的bean,applicationContext.getBea未返回也未报错
- python 正则匹配时间格式转换方法
- django基础之一
- 网络对抗技术 2017-2018-2 20152515 Exp5 MSF基础应用
- scanf_s,scanf安全版本
- BS和CS的区别
- oracle数据库之子查询
- RANSAC算法在图像拼接上的应用的实现
热门文章
- Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)
- bootstrap01登录小例子
- hdu 3450 Counting Sequences
- mysql 安装-编码
- 新装的mysql,直接安装板
- 多线程 - 线程同步锁(lock、Monitor)
- iOS7初体验(1)——第一个应用程序HelloWorld
- [转]dos命令 cd命令使用说明[图文说明]
- 292. Nim Game(C++)
- 【模板】【凸包】Graham_scan