一道值得深入思考的iOS面试题详解

2020-01-21 07:53:19刘景俊

前言

最近在群里看到有人发的一道面试题,题目如下:


@interface Spark : NSObject 

@property(nonatomic,copy) NSString *name; 

@end

@implementation Spark

- (void)speak {
 NSLog(@"My name is:%@",self.name); 
}

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 
 id cls = [Spark class];
 
 void *obj = &cls;
 
 [(__bridge id)obj speak];
}

问题:上述代码运行起来会:Complie error?|Runtime crash?|NSLog ?

最终问题就是这段代码的运行结果。

过程

第一眼看这个问题,我直接就想说,这个东西啊,肯定是编译报错了、要不就是崩溃啊

所以我就跟着写了些代码,结果发现:

WTF? 怎么能运行,而且结果竟然还是

iOS,面试题

相信当你看到这个结果的时候会和我一样吃惊,不和逻辑啊,怎么竟然能执行成功并且还打印出来当前controller了,不符合常理啊。

解析

对于计算机而言,不存在什么魔法,如果一段代码能运行必然存在它的原理。