Objective-C -类的本质

类的本质

#import "Person.h"
#import "Student.h"
#import "GoodStudent.h"
/*
 1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。

 2.当第一次使用某个类时,就会调用当前类的+initialize方法

 3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
   先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
 */

int main()
{
    // [[GoodStudent alloc] init];

    return 0;
}

void test1()
{
    Person *p = [[Person alloc] init];

    //[Person test];

    // 内存中的类对象
    // 类对象 == 类
    Class c = [p class];
    [c test];

    Person *p2 = [[c new] init];

    NSLog(@"00000");
}

void test()
{
    // 利用Person这个类创建了2个Person类型的对象
    Person *p = [[Person alloc] init];

    Person *p2 = [[Person alloc] init];

    Person *p3 = [[Person alloc] init];

    // 获取内存中的类对象
    Class c = [p class];

    Class c2 = [p2 class];

    // 获取内存中的类对象
    Class c3 = [Person class];

    NSLog(@"c=%p, c2=%p, c3=%p", c, c2, c3);

    //  类本身也是一个对象,是个Class类型的对象,简称类对象

    /*
     利用Class 创建  Person类对象

     利用 Person类对象 创建 Person类型的对象

     */
}
@interface Person : NSObject
@property int age;

+ (void)test;

@end
@implementation Person
+ (void)test
{
    NSLog(@"调用了test方法");
}

// 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法
+ (void)load
{
    NSLog(@"Person---load");
}

// 当第一次使用这个类的时候,就会调用一次+initialize方法
+ (void)initialize
{
    NSLog(@"Person-initialize");
}

@end
@interface Student : Person

@end
#import "Student.h"

@implementation Student

// 在类被加载的时候调用
+ (void)load
{
    NSLog(@"Student---load");
}

+ (void)initialize
{
    NSLog(@"Student-initialize");
}

@end
#import "Student.h"

@interface GoodStudent : Student

@end
#import "GoodStudent.h"

@implementation GoodStudent
+ (void)load
{
    NSLog(@"GoodStudent---load");
}

+ (void)initialize
{
    NSLog(@"GoodStudent-initialize");
}

@end
#import "Person.h"

@interface Person (CC)

@end
#import "Person+MJ.h"

@implementation Person (CC)
+ (void)load
{
    NSLog(@"Person(CC)---load");
}
+ (void)initialize
{
    NSLog(@"Person(CC)-initialize");
}
@end
时间: 2024-11-09 01:47:58

Objective-C -类的本质的相关文章

OC基础--类的本质

类的本质: 类的本质其实也是一个对象(类对象),只要有了类对象, 将来就可以通过类对象来创建实例对象 程序中第一次使用该类的时候被创建,在整个程序中只有一份.此后每次使用都是这个类对象,它在程序运行时一直存在. 类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本,继承层次,以及消息与函数的映射表等 类对象代表类,Class类型,保存了当前对象所有的对象方法,当给一个实例对象发送消息的时候, 会根据实例对象中的isa指针去对应的类对象中查找 如果消息的接收者是类名,则类名代表类对象

黑马程序员----类的本质

类的本质: 类本身也是一个对象,是一个Class类型的对象,简称类对象: 1.内存中创建对象的本质: 利用Class  创建一个 Person类对象: 利用person类对象,创建Person类型的对象. 2.类对象及对象内存细节: 3.类对象的其他使用: 调用类方法: 1.利用类名调用类方法: 2.利用类对象调用类方法: 创建对象:

类的本质、description方法、SEL、NSLog输出增强

一.类的本质 1.类也是个对象 其实类也是一个对象,是Class类型的对象,简称“类对象” Class类型的定义 typedef struct objc_class *Class; 类名就代表着类对象,每个类只有一个类对象 2.+load和+initialize +load 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法 先加载父类,再加载子类:也就是先调用父类的+load,再调用子类的+load 先加载元原始类,再加载分类 不管程序运行过程有没有用到这个类,都会调用+

iOS开发之oc(十)--类的本质、description、SEL

(一)类的本质 1.类也是个对象 其实类也是一个对象,是Class类型,简称“类对象”. // Class类型的定义 typedef struct objc_class *Class; // 类名就代表着类对象,每个类只有一个类对象 2.+load和+initialize +load >  在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法 >先加载父类,再加载子类:也就是先调用父类的+load,再调用子类的+load >先加载元原始类,再加载分类 >不管程序

黑马程序员— OC核心语法之构造方法、Category分类、类的本质、description和SEL

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC的一些核心语法,初步了解了OC作为一门开发语言的一些较为深层次的知识.本章我们继续学习OC的核心语法,主要包括OC的构造方法,Category分类,类的本质及深入研究,以及description关键字和SEL关键字. 第一讲     构造方法 1. 构造方法 构造方法是用来初始化对象的方法,是一个对象方法,以减号"-"开头,构造方法其实就是init方法,初始化完毕

黑马程序员-OC类的本质,深入探讨,load方法和initialize方法

1:类的本质:类也是一种类,可以叫做类类,类对象,类类型: 2:类和对象在内存中分配问题(注意区分类的对象和类对象的概念) 类对象在内存中只有一份,且只加载一次,类对象中存放了类中定义的方法: 而成员变量和isa指针,存放在了类的对象中;isa指针指向了类对象:如图: 3:类本身也是对象,是class类型的对象: // 以person为例 Person *p1 = [[Person alloc] init]; Person *p1 = [[Person alloc] init]; // 获取类对

OC语言类的本质和分类

OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件结构图: 在分类中添加一个方法 Study方法的实现 测试程序: (二)分类的使用注意 (1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量 (2)在分类方法的实现中可以访问原来类中的成员变量: (3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警

OC类的本质及分类

(一)类的本质 类对象(class object)与实例对象(instance object) 类本身也是一个对象,是class类型的对象,简称“类对象”. 在/usr/include/objc/objc.h 和 runtime.h 中找到对 class 与 object 的定义: Class 是一个 objc_class 结构类型的指针;而 id(任意对象)是一个 objc_object 结构类型的指针, 其第一个成员是一个 objc_class 结构类型的指针.注意这里有一关键的引申解读:内

OC类的本质(类对象)

类的本质 类的本质是类对象 类的加载初始化 + load , - initialize + load方法 当程序启动的时候,就会加载一次项目中的所有类,类加载完就会调用load方法 先加载父类然后加载子类,最后加载分类的load也会加载 - initialize方法 当第一次用到类的时候调用 先初始化父类在初始化子类 分类的initailize会覆盖原来类的initailize方法 NSLog方法打印对象或类时调用剖析 默认情况下NSLog 和%@输出对象时,结果是:<类名:内存地址> - d

[email&#160;protected]、self及类的本质

让代码书写更加简便 --1-- 设置器和访问器 1.1 setter 1.2 getter --2-- 类的本质 2.1 类类型的对象 2.2 类的本质 2.3 如何获取类对象 2.4 类对象的使用 2.5 类对象的存储 --3-- SEL类型 3.1 SEL --4-- @property关键字 4.1 基本概念 4.2 @property用法 4.3 @property使用注意事项 --5-- @synthesize关键字 5.1 @synthesize用法 5.2 @synthesize使