原题作者:@Sunny
原题地址: 神经病院objc runtime入院考试。
今天早上看到有一位好友 冰霜 写了一篇文章 神经病院Objective-C Runtime入院第一天—isa和Class
看着有些手痒,特地添加了一道拓展题,欢迎 iOS 的小伙伴们参加考试。
拓展题:添加或修改一行代码,使得下面的输出为
my name's Sark
@interface Sark : NSObject
@property (nonatomic, copy) NSString *name;
- (void)speak;
@end
@implementation Sark
- (void)speak {
NSLog(@"my name's %@", self.name);
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
id cls = [Sark class];
void *obj = &cls;
[(__bridge id)obj speak];
}
@end











网友评论
最后我的答案是把self.name 改成 [Sark class] 。具体如下:NSLog(@"my name's %@", [Sark class]);
快了
id cls1 = [Sark class];
方法二、 添加 [(__bridge id)obj setName:NSStringFromClass([Sark class])];
要不再次修改
1、NSLog(@"my name's %@", [super class]);
2、NSLog(@"my name's %@", [self class]);
或者再次添加
1、[(__bridge id)obj setValue:@"Sark" forKey:@"name"];
2、((void (*)(id, SEL,NSString *))objc_msgSend)((__bridge id)obj, @selector(setName:),@"Sark");
其他的暂时没想到,求指点,