description :重写方法,帮助输出对象。
@interface Person
+ (NSString *)description
- (NSString *)description
@property int age;
@property NSString *name;
@end
@implementation
//决定了实例对象的输出结果
- (NSString *)description
{
//NSLog(@"%@",self);死循环重复调用description方法。
return [NSString stringWithFormat:@"age=%d,name=%@",_age,_name];
}
//决定了类对象的输出结果
+ (NSString *)description
{
return @"sdfasdf";
}
@end
int main()
{
Person *p = [[Person alloc] init];
NSLog(@"%p", p);//不要画蛇添足的将p写成&p。打印的是对象地址
NSLog(@"%p", &p)//打印的是指针变量的地址,而不是存储的对象地址。
NSLog(@"%@", p)//<类名: 对象地址>注意前面都有空格。
p.age = 20;
p.name = @"jack";
//默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>
//会调用对象p的-description方法
//拿到-description方法的返回值(NSString *)显示到屏幕上
//-description放阿飞默认返回的是类名:内存地址
NSLog(@"%@",p);
NSString *name = @"Rose";
NSLog(@"%@",name);
Class c = [Person class];
//输出Person,调用+description方法
//拿到+description方法的返回值(NSString *)显示到屏幕上
NSLog(@"%@",c);
rerurn 0;
}
NSLog的输出补充:
NSLog(@"%d",__LINE__);//当前代码的行号.两个下划线
//NSLog(@"%s",__FILE__);
//NSLog输出C语言字符串的时候,不能有中文
//输出源文件的名称
printf("%s\n",__FILE__);
//输出当前函数名
NLSog(@"%s",__fun__);
SEL
:一个SEL类型的数据就代表一个方法
@interface Person : NSObject
+ (void)test1;
- (void)test2;
- (void)test3:(NSString *)abc;
@end
@implementation
- (void)test3:(NSString *)abc
{
//隐藏了一个SEL数据即_cmd代表了当前方法
NSString *str = NSStringFormSelector(_cmd);
//死循环
//[self performSelector:_cmd];
NSLog(@"test3---%@", str);
}
@end
int main()
{
Person *p = [[Person alloc] init];
[p test2];
//performSelector:(SEL)
//创建SEL数据@selector()
//间接调用test2方法
[p performSelector:@selector(test2)]
/*
SEL s1 = +test地址
*/
//1,把test2包装秤SEL类型的数据
//2.根据SEL数据找到对象的方法地址
//3.根据方法地址调用对应地址
//[p test:@"123"]
//[p performSelector(SEL) withObject:(id)]
[p performSelector(test3:) withObject:@"123"];
SEL s = @selector (test3:);
[p performSelector:s withObject:@"123"];
NSString *name = @"test2";
SEL s = NSSelectorFormString(name);//将一个字符串转成SEL数据
[p performSelector:s];
return 0;
}
/*
SEL其实是对方法的一种包装将方法包装秤一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法。
其实消息就是SEL
*/
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com