OC核心语法(二)
来源:互联网 发布:淘宝代写 举报 编辑:程序博客网 时间:2024/05/01 05:15
一、description方法
1、 -description方法
使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出
2、 +description方法
使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出
3、 修改NSLog的默认输出
重写-description或者+description方法
例如:
#import <Foundation/Foundation.h>@interface Person : NSObject@property int age;@property NSString *name;@end@implementation Person- (NSString *)description{ //方法的返回值会显示到屏幕上 return [NSString stringWithFormat:@"age=%d,name=%@",_age,_name];}+ (NSString *)description{ return @"wj";}@end#import <Foundation/Foundation.h>#import "Person.h"int main(){ Person *p = [[Person alloc] init]; p.age = 10; p.name = @"cx"; //如果没有重写description方法,打印的将会是类的地址 //调用的是对象description NSLog(@"%@",p); //调用类的description NSLog(@"%@",[Person description]); Class c = [Person class]; NSLog(@"%@",c); return 0;}
如果在-description方法中使用NSLog打印self则会陷入死循环,因为self会调用到本身。
例如:
- (void)description{ NSLog(@"%@",self);}
二、SEL
1、什么是SEL
每个类的方法列表都存储在类对象中,SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法在内存中的地址,找到地址就可以调用该方法了
2、SEL类型的定义
SEL在程序库中的定义如下:
typedef struct objc_selector *SEL;
所以定义SEL的变量时也不需要跟上“*”
3、SEL对象的创建
SEL s = @selector(test);//直接将已知的方法转为SEL对象SEL s2 = NSSelectorFromString(@"test");//根据方法名转为SEL对象
4、SEL对象的其他用法
// 将SEL对象转为NSString对象NSString *str = NSStringFromSelector(@selector(test));Person *p = [Person new];// 调用对象p的test方法[p performSelector:@selector(test)];
代码示例:
#import <Foundation/Foundation.h>@interface Person : NSObject- (void)test;- (void)test1:(NSString *)name;- (void)test3;@end@implementation Person- (void)test{ //每一个方法中都有一个sel类型的变量_cmd,该变量记录的是该方法的名字 //SEL s = _cmd; //将SEL类型转为字符串类型 NSString *s = NSStringFromSelector(_cmd); //NSString *s = [NSString ] NSLog(@"调用了test方法——————%@",s);}- (void)test1:(NSString *)name{ NSLog(@"调用的是test1方法————%@",name);}- (void)test3{ NSLog(@"test3");}@end#import <Foundation/Foundation.h>#import "Person.h"int main(){ Person *p = [[Person alloc] init]; /**通过方法名字符串调用该方法,不带参数*/ NSString *name = @"test"; // 将该字符串转为SEL类型 SEL s = NSSelectorFromString(name); //通过SEL类型数据调用该方法 [p performSelector:s]; //间接调用test3 [p performSelector:@selector(test3)]; /**通过方法名字符串调用该方法,带参数*/ //:也是方法名的一部份 NSString *name1 = @"test1:"; //将该字符串转为SEL类型 SEL s1 = NSSelectorFromString(name1); //通过SEL类型数据调用该方法 [p performSelector:s1 withObject:@"wj"]; return 0;}
三、NSLog输出增强
__FILE__ :源代码文件名
__LINE__ :NSLog代码在第几行
_cmd :代表着当前方法的SEL
会引发死循环的代码:- (void)test { [self performSelector:_cmd];}
0 0
- OC核心语法(二)
- OC核心语法(2)构造函数
- OC核心语法
- OC核心语法
- OC核心语法
- ⑦--OC核心语法
- OC-8-核心语法
- OC语言核心语法
- OC 核心语法
- OC 核心语法罗列
- OC语法的核心
- 黑马程序员:OC学习日记之核心语法二
- 黑马程序员--------iOS培训 OC核心语法二
- OC学习之核心语法
- OC语言之核心语法
- 黑马程序员----OC核心语法
- 学习笔记:OC核心语法
- OC学习之核心语法
- C#中的多线程技术
- linux程序同时链接动态库与静态库
- ACM编程比赛入门题目之蛇形矩阵
- 从每条信息中挖掘利润
- 如何查看项目svn路径
- OC核心语法(二)
- Angular Js
- 《JSP实用教程(第2版)/耿祥义》错误之“发呆”时间
- hdu 2203
- 机器学习10大经典算法
- 传奇私服技术资源下载
- 水题:
- 按优先数调度算法实现处理器调度的程序
- 带阻塞读模式的循环队列实现