ARC模式下,程序闪退原因
2015-08-04 09:35
253 查看
目前做项目运用的都是ARC模式,虽然系统会自动回收内存,但是在某些释放不当的情况下,项目还是会出现闪退的情况。以下是我自己遇到的一些情况。
1 delegate属性的描述词使用的是assign,或者是strong会造成闪退,应该使用weak
2 如果使用了通知,例如:
[[NSNotificationCenter
defaultCenter] addObserver:self
selector:@selector(hideKeyboard)
name:UIKeyboardWillHideNotification
object:nil];那么在
- (void)dealloc方法中必须移除掉该通知,
[[NSNotificationCenter
defaultCenter]removeObserver:self
name:UIKeyboardWillHideNotification
object:nil];
3 增加了观察者例如:
[self
addObserver:self
forKeyPath:@"contentSize"
options:NSKeyValueObservingOptionNew
context:nil]; 那么在dealloc中也必须要移除该观察者。
- (void)dealloc
{
[self
removeObserver:self
forKeyPath:@"contentSize"];
}
4 键盘弹出的情况,在tableviewcell中,需要弹出键盘,然后cell需要有一定的滚动,如果cell没有重用的话,也可能造成闪退。cell的contentView中的subview一般我是存放在dictionary中,以indexPath作为key值。
1 delegate属性的描述词使用的是assign,或者是strong会造成闪退,应该使用weak
2 如果使用了通知,例如:
[[NSNotificationCenter
defaultCenter] addObserver:self
selector:@selector(hideKeyboard)
name:UIKeyboardWillHideNotification
object:nil];那么在
- (void)dealloc方法中必须移除掉该通知,
[[NSNotificationCenter
defaultCenter]removeObserver:self
name:UIKeyboardWillHideNotification
object:nil];
3 增加了观察者例如:
[self
addObserver:self
forKeyPath:@"contentSize"
options:NSKeyValueObservingOptionNew
context:nil]; 那么在dealloc中也必须要移除该观察者。
- (void)dealloc
{
[self
removeObserver:self
forKeyPath:@"contentSize"];
}
4 键盘弹出的情况,在tableviewcell中,需要弹出键盘,然后cell需要有一定的滚动,如果cell没有重用的话,也可能造成闪退。cell的contentView中的subview一般我是存放在dictionary中,以indexPath作为key值。
相关文章推荐
- Lua的内存管理浅析
- 深入探讨PHP中的内存管理问题
- linux 内存管理机制详细解析
- 解析PHP中的内存管理,PHP动态分配和释放内存
- javascript内存管理详细解析
- JavaScript内存管理介绍
- Cocos2d-x的内存管理总结
- 模拟实现C语言中的内存管理
- javascript错误的认识不用关心内存管理
- Python深入学习之内存管理
- 简单说说STL的内存管理
- InnoDB存储引擎的内存管理机制
- jemalloc优化MySQL、Nginx内存管理
- 【转】JVM内存管理:深入垃圾收集器与内存分配策略
- JavaScript内存管理介绍
- C/C++内存管理详解
- Oracle 自动管理 ASMM
- Windows CE内存管理
- Java内存管理
- iOS内存管理编程指南