在写代码的时候经常会遇到crash的情况, 在我学习的这段过程中, 主要的程序崩溃原因无非就三种, 一是数组越界, 二是不识别选择器, 三就是内存了, 最近总想总结总结这方面的问题, 来理清一些自己的思路, 和他人分享分享, 以保证以后自己或他人在写代码是尽量避免这种问题的出现.
1. 数组越界: 对于我来说造成数组的越界的原因大概有以下几种情况, 一是在对数组进行操作前没有对数组进行初始化, 这样数组就没有自己的内存空间了, 自然就没有数据了. 当你对数组进行存取数据是就会造成数组的越界了, 二是对数组中的数据个数的不了解, 导致数组的越界.
2. 不识别选择器: 不识别选择器的一原因就是你对你操作的对象的不了解或者不注意, 这种情况的出现的频率很大, 通常就是不经意间或是马虎. 只要在写代码是小心一些就不会出现问题的.
3. 关于内存的错误一应该最为棘手了, 对我而言常见的就是内存的国度释放, 造成野指针的异常, 这方面的排错通常要进行断点得调试, 当我遇到这样的情况时我通常会找程序中的release了, 当然这仅仅是在一些代码较少的情况下了. 在检查代码的时候我通常会注意对象在release之前是否有add…..的方法对它进行添加, 如果没有的话, 经过release后, 对象的引用计数就会为零, 并调用dealloc方法释放.在这种情况下对对象进行操作时,就会造成内存泄露, 程序的崩溃.
4. 还有就是内存的过多造成程序的崩溃, 对于这一块我不太了解, 但是我还想研究研究, 所以我就查了查资料, 看了看博客, 大致的了解一下, 与大家分享一下:
(1) 对于创建UIImage的时候用imageNamed创建, 该方法会根据图片的名字将图片的数据存储到系统的内存中, 但对象被释放时, 系统中的缓存不会被释放掉,如果图片较大, 或图片非常多时, 系统的缓存将会非常大, 这种方法和你耗内存.
(2) 在使用tableView时创建cell和UITableViewFooderHeaderView时要用重用池机制.在对cell进行赋值是尽量少用stringWithFormat 方法进行赋值, 对于该方法记耗时间, 又费内存,
(3) 关于 colorWithPatternImage 的内存泄露, 这个我不太懂, 大神们说这个是系统的一个bug.