什么是野指针,iOS中什么情况会出现野指针?
野指针这个概念,可以看看百度百科就可以明白了:
野指针是:指向一个已删除的对象或未申请访问受限内存区域的指针
通常产生的场景:
1.指针变量未初始化
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
2.指针释放后之后未置空
有时指针在free或delete后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。此时指针指向的就是“垃圾”内存。释放后的指针应立即将指针置为NULL,防止产生“野指针”。
3.指针操作超越变量作用域
理解,指针引用,和赋值引用即可
iOS中什么情况会遇到野指针呢?
其实在MRC时代,需要自己管理内存的时候,是很容易遇到野指针这些情况的,只要当你release之后没有及时置nil(nil发送消息没有问题),就会产生野指针的crash问题
而在ARC下,虽然编译器将这些容易由于程序员不良好的习惯引起的错误通过自动添加而去掉,还是有可能会因为野指针的原因导致出现问题
例如:直接 [releasedView removeFromSuperview],如果releasedView已经提前被释放掉,直接removeFromSuperview会产生野指针的问题,,正确的应该先判断:
if([releasedView superview]) 这样去判断才对