黑马程序员IOS-OC语言-类的本质、SEL

——- android培训、java培训、期待与您交流! ———-


类的本质

类也是一个对象,是Class类型的对象,简称“类对象”

Class 类型的定义
typedef struct objc_class *Class;

类名就代表着类对象,每个类只有一个类对象


方法 + load 和 + initialize

load

在程序启动时会加载所有的类和分类,并调用所有类和分类的 + load 方法(不论有没有用到该类)

调用优先级: 父类 -> 子类 -> 分类

initialize

在第一次使用某个类时,就会调用一次 + initialize 方法

一个类只会调用一次 + initialize 方法,先父类后子类 (super)


获取类对象的方式

1.
Class c = [Person class];   // 直接调用类的class方法

2.
Person *p = [Person new];
Class c2 = [p class];       // 间接调用对象的class方法

类对象调用类方法

Class c = [Person class];
Person *p = [c new];    // 就是将类对象当做类名使用

description 方法

- description 方法
> 使用 NSLog 和 %@ 输出某个对象时,会调用对象的 - description 方法输出

+ description 方法
> 使用 NSLog 和 %@ 输出某个类对象时,会调用类对象 + description 方法输出

修改 NSLog 的默认输出

重写 - description 或者 + description 方法即可

SEL

类型的定义:

typedef struct objc_selector *SEL;

类 —–> 方法 <==> SEL


SEL 对象的创建

// SEL 对象前没有 *
1.SEL s = @selector(方法名);     
    // 注意有参数的方法名会带有:

2.SEL s = NSSelectorFromString(@"方法名"); 
    // 获取字符串中的方法的SEL对象

SEL 对象的其他用法

// 将 SEL 对象转为 NSString 对象
NSString *指针变量名 = NSStringFromSelector(@selector(方法名));

// 通过 SEL 调用方法
SEL s = @selector(方法名);     // 获取对应方法名的 SEL 对象
[对象名 performSelector : s];  // 对象调用 SEL 对象对应的方法

NSLog 输出增强

__FILE__  :  源代码文件名

__LINE__  :  NSLog代码所在行数

__cmd     :  代表着当前方法的SEL

——- android培训、java培训、期待与您交流! ———-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值