黑马程序员-description,NSLog补充以及SEL

来源:互联网 发布:c语言做窗口按钮 编辑:程序博客网 时间:2024/05/16 23:02
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

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
0 0
原创粉丝点击