iOS 释放内存/指针清空(release/=nil)深度讨论
来源:互联网 发布:网络四层协议 编辑:程序博客网 时间:2024/05/16 07:38
(1)release/=nil,前后顺序是可以随便用。并且=nil是可以用无数次。
(2)两个指针指向同一个对象,其中一个指针清空(=nil),不影响另一个。如下两个图,比较可知:
(3)两个指针指向同一个对象,其中一个释放内存【即retainCount - 1】(release),影响另一个。如果引用到另一个指针的话会报错:
如果你开了:NSZombieEnabled,引用被释放的对象时,报错如下:*** -[objcect respondsToSelector:] message sent to deallocated instance 0x6a109f0
**************************************************************************************************
对比一:
①调用[objcet release]后,指针仍然指向内存块:0x6a109f0
②而调用object=nil(containObject.delegate=nil)后,指针不指向任何内存块,即内存地址:0x0
**************************************************************************************************
对比二:
①引用一个retainCount=0的指针,是出错的:
②引用一个内存地址:0x0的指针,是不会出错的:
*************************************************************************************************
嘘……下面我来一个高度的概括,连苹果官网都没我这个概括那么概括。千万不要告诉人家(不过你告诉人家,我也没办法,不绝对不会追究知识产权的)。
一个指针调用 release 函数,是会影响到所有指向同一对象的指针。总的来说,释放内存(rlease)方面,所有的指针是Shared的。
一个指针=nil,只会影响到本身,不会影响到所有指向同一对象的其它指针。总的来说,指针清空(=nil)方面,所有的指针是Independent的。
- iOS 释放内存/指针清空(release/=nil)深度讨论
- IOS内存nil与release的区别
- IOS内存nil与release的区别
- 一个释放后自动清空实例指针的类
- 一个释放后自动清空实例指针的类
- Linux释放内存后。清空swap分区
- C++ 如何快速清空vector以及释放vector内存?
- ios深究release与nil
- 清空大脑,释放压力
- [Delphi]内存分配和释放 内存操作函数(4): 清空与填充内存
- iOS空值--nil,Nil,NULL,NSNull
- IOS开发之内存管理self.prop=nil; vs. [prop release];prop=nil;
- Vector清空数据与释放内存(.clear与.swap的区别与使用)
- 关于opencv中Vector内存释放或者元素清空的问题
- [Objective-C] 释放对象时在release之后要设成nil
- iOS-对象为空的判断(nil、null)
- iOS-对象为空的判断(nil、null)
- iOS-对象为空的判断(nil、null)
- 求a-z26个字母的三三组合
- unity坦克大战(二)(代码修改后)
- 求二叉树中两个节点的最低公共祖先节点
- 网盘API接口
- Pointer Summarized
- iOS 释放内存/指针清空(release/=nil)深度讨论
- java.lang.IllegalStateException: getOutputStream() has already been called for this response
- HW
- 笔试题目练习
- WebView中接口隐患与手机挂马利用 转载乌云
- 1
- Exercises 4.1 E2
- 关于“android4.0中,在通话界面进入锁屏界面后出现两个电话图标”这一Bug的解决方法
- 原型模式深浅复制