OC基础—description方法、SEL类型
来源:互联网 发布:买手机哪几个淘宝网好 编辑:程序博客网 时间:2024/05/21 06:25
------ android培训、java培训、期待与您交流! ----------
OC基础—description方法
description方法是我们OC自带的方法,description方法分两种(-description,+description)
我们有一个要求,NSLog(@"%@", p);p是一个Person 对象,这时NSLog会输出<类名:内存地址>,现在我们需要使用NSLog(@"%@", p);输出的是p这个对象时输出的是对象的具体属性。
NSLog是怎样工作的呢?
1.当我们使用NSLog这个函数时,会调用对象的一个方法-description方法。
2. 拿到-description方法的返回值(NSString *)显示到屏幕上。
3. -description方法默认返回的是<类名:内存地址>
那么我们重写一下-description方法
#import "Person.h"@implementation Person- (NSString *)description{ return [NSString stringWithFormat:@"age = %d, name = %@", _age, _name];}@end
而如果我们要输出一个类对象:
Class c = [Person class];
NSLog(@"%@", c);
1. 先会调用类的+description方法
2. 拿到+description方法的返回值显示到屏幕上
#import "Person.h"@implementation Person+ (NSString *)description{ return [NSString stringWithFormat:@"age = %d, name = %@", _age, _name];}@end
下面补充一点NSLog相关的东西
void test(){ //日志增强 NSLog(@"%d", __LINE__); // 行号 // NSlog 输出c语言字符串的时候,不能有中文 // NSLog(@"%s", __FILE__); // 路径 printf("%s", __FILE__); NSLog(@"%s", __func__); // 输出当前函数名 Person *p = [[Person alloc] init]; p.age = 20; p.name = @"liye"; // 指针变量的地址 NSLog(@"%p", &p); // 类名:对象地址 NSLog(@"%@", p); // 对象地址 NSLog(@"%p", p);}SEL类型
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法。
对象的方法我们早就知道是存放到类当中的。
类中的每个方法都有一个与之对应的SEL类型的数据,当我们调用方法时,他会根据对象中的isa指针,将方法包装成SEL类型的数据区类中找。看看这个SEL对应的是哪个方法,然后调用。其实SEL存储的时方法的地址,根据SEL地址找到方法地址,找到对应的地址。
这种方式使用缓存的,第一次使用之后,以后调用就可以直接调用
#import <Foundation/Foundation.h>#import "Person.h"int main( ){ Person *p = [[Person alloc] init]; // 这句话一执行就会分配空间给类,类里的每一个方法都有一个Sel类型的数据相对应 [p test2]; // 1.给person对象分配空间,isa指向类 把test2包装成sel类型的数据,去类里面找 2.根据SEL数据找到相对应数据地址 3、根据方法的地址调用对应的方法 // 第二种方式调用方法 [p performSelector:@selector(test2)]; [p test3:@"asdfsa"]; // 第三种方式调用方法 [p performSelector:@selector(test3:) withObject:@"asdfsa"]; // 也可以这样,我们知道一个方法的字符处啊形式 NSString *name = @"test3"; SEL s = NSSelectorFromString(name); [p performSelector:s withObject:@"123"]; return 0;}
SEL对象的创建:
SEL s = @selector(test);
SEL s2 = NSSelectorFromString(@"test");
将SEL对象转为NSString对象
NSString *str = NSStringFromSelector(@selector(test));
每个方法里面都有一个SEL类型的数据_cmd,_cmd代表着当前对象。
------ android培训、java培训、期待与您交流! ----------
0 0
- OC基础—description方法、SEL类型
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- OC语言description方法和sel
- OC中description方法和sel
- OC语言description方法和sel
- OC语言description方法和sel
- OC语言12-description方法和sel
- OC基础day4-继承,self,super,多态,类对象,SEL类型,description,私有方法与私有变量,三种访问限制
- 黑马程序员——OC基础——category、description和SEL
- 黑马程序员 _8 OC基础 id description sel的使用
- OC基础-类的本质+description+SEL
- OC关键字@property、@synthesize和id类型、构造方法、分类categary、类的本质、description方法、SEL消息机制
- 13、黑马程序员-OC语言description方法和sel
- OC核心语法(4)description方法和SEL
- OC中description和SEL
- OC中的description和sel
- OC语言SEL和description
- description方法和SEL
- 心情日志
- poj3233-矩阵构造
- 数据结构:区域染色问题
- 乔布斯斯坦福毕业演讲
- 23种设计模式之python实现--visitor模式
- OC基础—description方法、SEL类型
- 为SharePoint列表数据创建树视图结构
- hdu 4597 Play Game(记忆化搜索)
- 用node.js制作DNS解释网站
- java中的抽象类
- Redis学习笔记2-Redis的安装体验
- 有关Android Usb Host开发
- Nagios 4.0.1版本安装 适用于RHEL/Centos 5.x/6.x 或者Fedora 17/18/19(一)
- xcode 5.0 以上去掉icon高亮方法&iOS5白图标问题