一个SwiftCrash引发的讨论

看白癜风要多少钱 http://pf.39.net/xwdt/160309/4784103.html
背景

周日晚上,看到Vong在文章《聊聊最近遇到的一个Crash》中表示遇到了一个Swift特有的Crash,最后只解决了问题,没有找到根本原因。我就把他拉到了最近刚组的Swift老炮交流群里面,想着这个问题还蛮有意思的,估计会有不少人感兴趣。果然,最后炸出了不少潜水的群友。经过一番讨论之后,最后

Cyandev发现了原因。

因为在讨论过程中发现了几个有意思的东西,所以想写一篇简短的笔记,来大家分享一下。

问题描述

我先简单描述一下问题,问题发生于下面这种写法,在运行时会直接crash:

classManager:NSObject{deinit{_=String(format:"%p",self)}}classViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()let_=Manager()}}

如果我们把它改成OC的写法,则不会发生Crash:

interfaceManager:NSObject

end

implementationManager-(void)dealloc{NSString*ret=[NSStringstringWithFormat:

"%

",self];}

end

interfaceViewController()

end

implementationViewController-(void)viewDidLoad{[superviewDidLoad];Manager*manager=[[Manageralloc]init];}

end解决问题

解决Crash最快捷的方式就是查看堆栈,崩溃堆栈如下:

Thread1Queue:


转载请注明:http://www.aierlanlan.com/cyrz/611.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了