记录一下最近遇到的排查了很久的一个怪异 Crash。
卖个关子
// 代码段1
class Manager: NSObject {
deinit {
print("deinit " + String(format: "%p", self))
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var x: Manager? = Manager()
}
}
// 代码段2
@interface Manager : NSObject
@end
@implementation Manager
- (void)dealloc {
NSLog(@"dealloc: %@", [NSString stringWithFormat:@"%p", self]);
}
@end
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Manager *manager = [Manager new];
}
@end
以上两段代码运行起来后会分别会发生什么?编译报错?正常输出?输出异常?Crash?
相信看了标题,肯定会有人说会 Crash,具体是代码段1还是代码段2,还是都会 Crash 呢?且往下看~
场景一
现象
线上遇到这类 Crash,基本上都是系统堆栈,如下图