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

来源:互联网 发布:剑三小令狐伤捏脸数据 编辑:程序博客网 时间:2024/05/17 22:25

——- 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