iOS中内存管理问题
2015-07-29 18:56
330 查看
mrc
在学习的时候一致有一个地方不理解,为什么变量retain之后又release,现在算是明白了:- (void)setFoo:(Foo *)foo{ if (_foo != foo) { //_foo是当前实例变量,foo为传入的参数,两者是不同的实例变量,指向不同内存空间 [_foo release]; //把_foo引用计数减1后为零,把指向的内存空间释放,而foo当前是被autoRelease的,实际引用计数为1,但之后自动为0 _foo = nil; //提高安全性 _foo = [foo retain]; //把foo指向的内存空间引用计数加一,把_foo的指向到foo的内存空间,即现在两者指向同一个地址,如果此时不retain之后_foo和foo指向的内存会被释放 } }
抛出异常
mrc下try块内创建了对象,必须清理干净:A *a; @try { a = [[A alloc] init]; } @catch(...) { NSLog(@"Error"); } @finally { [a release]; }
而在arc下,arc并不会自动调用release,所以有可能会造成内存泄漏,这个时候可以开启编译器标志-fobjc-arc-exceptions,但是这么做会导致app变大,降低运行效率。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Lua的内存管理浅析
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 深入探讨PHP中的内存管理问题
- .net平台推送ios消息的实现方法
- linux 内存管理机制详细解析
- 解析PHP中的内存管理,PHP动态分配和释放内存
- javascript内存管理详细解析
- JavaScript内存管理介绍
- 探讨Android与iOS,我们将何去何从?
- Cocos2d-x的内存管理总结
- Android、iOS和Windows Phone中的推送技术详解
- javascript错误的认识不用关心内存管理