---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、description方法
1、概念
1>当使用NSLog和%@输出某个对象时,会调用对象的-description方法
2>当使用NSLog和%@输出某个类对象时,会调用类的+description方法
2、作用
我们可以重写+description和-description方法来得到我们想要的输出结果
3、使用方法
1>-description方法默认输出 <类名:对象地址>
2>+description方法默认输出 类名
- (NSString *)description
{
return [NSString stringWithFormat:@"\n age=%d, name=%@", _age, _name];
}
+ (NSString *)description
{
return @"Abc";
}
1>description方法的返回值为NSString类型
2>在方法内部使用NSLog("%@", self);会引发死循环
二、SEL对象
1、概念
1>每个方法都有一个与其相对应的SEL对象,根据一个SEL对象可以找到方法的地址,进而调用方法。
2>SEL的定义
typedef struct objc_selector *SEL;
2、使用方法
1>SEL的创建方法
SEL s1 = @selector(test); // 使用selector关键字创建,括号中放方法名称
SEL s2 = NSSelectorFromString(@"test"); // 使用字符串转换方法,将方法名字符串转换为SEL
Person *p = [[Person alloc] init];
[p performSelector:@selector(test)]; // 调用Person类的test方法
3>SEL转换为字符串
NSString *str = NSStringFromSelector(@selector(test));
3、注意点
1>不要在方法中调用方法本身,会引发死循环
- (void)test
{
[self performSelector:_cmd]; // _cmd代表着当前方法
}
2>方法名称包括":",在使用selector时不要忘记
3>OC消息机制中的消息,指的就是SEL
4>关键字补充
_FILE_:源代码文件名
_LINE_:NSLog这行代码的行数
_cmd:当前方法的SEL
5>NSLog可以输出C语言字符串,但字符串中不能包含中文。
NSLog("%s", _FILE_);
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com