
野指针出现的原因是指针没有赋值,或者指针指向的对象已经被释放掉了,野指针指向一块随机的垃圾内存,向他们发送消息会报EXC_BAD_ACCESS错误导致程序崩溃;
空指针不同于野指针,它是一个没有指向任何东西的指针,空指针是有效指针,值为nil、NULL、Nil或0等,给空指针发送消息不会报错,只是不响应消息而已,应该给野指针及时赋予零值变成有效的空指针,避免内存报错。
对于一个指向对象的变量,它里面存储的是一个地址,一个指向内存中某块区域的地址。
nil:的作用就是将这个变量置为空,不指向任何地址。
release:的作用是将这个变量指向的内存中的对象的引用计数减一,直到引用计数为零时释放这块内存。
所以,如果你只是做了nil *** 作,那么就会引起内存泄露的问题,因为它永远也不会做release *** 作了。
如果你只是做了release *** 作,那么就有可能引起crash,原因就是只是release(我认为这个对象已经被释放)而没有将变量置为空,当你再对这个变量做 *** 作时就会引起问题,因为你在对一个不存在的对象做 *** 作。
所以建议,不再需要一个对象时,除了要做release *** 作以外还要做nil *** 作。
NSString *str此时str指向当前对象。所以对它的 *** 作要小心,建议:NSString *str = nil
1.内存中被过度释放的对象,又称僵尸对象,报EXC_BAD_ACCESS错误调式。访问了一个已经被释放的对象。
2.手动设置NSZombieEnabled环境变量:Edit scheme—>Test—>diagnostics—>zombie objects。不建议手动设置,因为会导致内存占用的增长,同时会影响Leaks工具的调式,这是因为设置NSZombieEnabled会用僵尸对象来代替已释放对象。
3.启动Instruments,选择Zombies进行调试。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)