前言
最近在群里看到有人发的一道面试题,题目如下:
@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? 怎么能运行,而且结果竟然还是
相信当你看到这个结果的时候会和我一样吃惊,不和逻辑啊,怎么竟然能执行成功并且还打印出来当前controller了,不符合常理啊。
解析
对于计算机而言,不存在什么魔法,如果一段代码能运行必然存在它的原理。











