今天去网易面试,面试官出了一道面试题,下面代码会发生什么问题?
@property (nonatomic, strong) NSString *target;
//。。.。
dispatch_queue_t queue = dispatch_queue_create( “parallel” , DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i 《 1000000 ; i++) {
dispatch_async(queue, ^{
self.target = [NSString stringWithFormat:@ “ksddkjalkjd%d” ,i];
});
}
当时我把自定义的队列看成了串行队列,然后回答:“没错呀”。后来一运行崩溃了……
面试后,我就仔细回想,敲了Demo,看看崩溃原因是啥。
正好试试小伙伴给我介绍的调试野指针的方法,XCode7以上才有的Address Sanitizer。
打开后发现是经典的EXC_BAD_ACCESS错误,以我浅薄的经验来看,这种一般是对一个已释放的内存的对象再次发送消息出现的。
屏幕快照 2017-08-25 上午1.55.50
再看看崩溃堆栈
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !