使用 NSLog 和 %@ 输出某个对象时,会调用对象的 -description 方法,并拿到返回值进行输出
使用 NSLog 和 %@ 输出某个对象时,会调用类对象 +description 方法,并拿到返回值进行输出
Class c = [Person class]; NSLog(@"%@", c); 会调用类的 +description 方法拿到 +description 方法的返回值(NSString *)显示到屏幕上+description 方法默认返回的是“类名”默认情况下,利用 NSLog 和 %@ 输出对象时,结果是:<类名:内存地址>
Person *p = [[Person alloc] init]; p.age = 20; p.name = @"Jack"; NSLog(@"%@", p); 会调用对象p的 -description 方法拿到 -description 方法的返回值(NSString *)显示到屏幕上-description 方法默认返回的是“类名+内存地址”重写 -description 和 +description 方法即可
给一下官方文档的说明截图
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法
其实消息就是SEL
- (void)test2 { // _cmd代表着当前方法 NSString *str = NSStringFromSelector(_cmd); // 会引发死循环 // [self performSelector:_cmd]; NSLog(@"调用了test2方法-----%@", str); }新博客文章地址:description 方法 和 SEL