慎用autorelease

今天检查到一个导致应用崩溃的bug,原因就是滥用autorelease,这个方法很方便,经常可以省略一行代码,但是用的不好的话就容易产生不易发现的错误,特别是在多线程的处理中。

某个view中的类class1被定义了autorelease,class1使用了view中的数据,view dealloc时,试图释放class,但是由于class1是自释放的,所以可能会等待一段时间才会被释放,此时某个线程回调了class1的方法,试图访问view中的数据,但是这个数据已经被释放了,导致崩溃。用release则不会有上面的问题。

注意到即使调用了autoreleasepool的drain方法,自动释放对象也不会马上释放。

你可能感兴趣的:(auto)