Object Runtime

作者: AKyS佐毅 | 来源:发表于2017-01-06 20:51 被阅读48次

Object Runtime

int main(int argc, char * argv[]) {
    
    NSLog(@"%s",__func__);
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
#import "Person.h"

@implementation Person

+ (void)load{
    NSLog(@"%s",__func__);
}

+ (void)initialize{
    [super initialize];
    NSLog(@"%s %@",__func__,[self class]);
}

- (instancetype)init{
    if (self = [super init]) {
        NSLog(@"%s",__func__);
    }
    return self;
}

@end
@implementation Girl

+ (void)load{
    NSLog(@"%s ",__func__);
}

+ (void)initialize{
    [super initialize];
    NSLog(@"%s ",__func__);
}

- (instancetype)init{
    if (self = [super init]) {
        NSLog(@"%s",__func__);
    }
    return self;
}

@end

执行操作

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    Person * p1 = [Person new];
    Person * p2 = [Person new];
    Girl *c1 = [Girl new];
    Girl *c2 = [Girl new];
}
@end

执行结果:

+[Person load]
+[Girl load]
main
+[Person initialize] Person
-[Person init]
-[Person init]
+[Person initialize] Girl
+[Girl initialize]
-[Person init]
-[Girl init]
-[Person init]
-[Girl init]
  • 在没有对类做任何操作的情况下,+load 方法会被默认执行,并且是在 main 函数之前执行的。

  • initialize 方法类似一个懒加载,如果没有使用这个类,那么系统默认不会去调用这个方法,且默认只加载一次;

  • initialize 的调用发生在 +init 方法之前.

  • 在所有超类的+加载方法之后调用类的+ load方法。

  • 在类自己的+ load方法之后调用category + load方法。

  • load和initialize方法都会在实例化对象之前调用,以main函数为分水岭,前者在main函数之前调用,后者在之后调用。这两个方法会被自动调用,不能手动调用它们。
  • load和initialize方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类。
  • load方法通常用来进行Method Swizzle,initialize方法一般用于初始化全局变量或静态变量。
  • load和initialize方法内部使用了锁,因此它们是线程安全的。实现时要尽可能保持简单,避免阻塞线程,不要再使用锁。

相关文章

  • runtime详解

    runtime详解 1,runtime的核心—消息传递 在[object foo]在运行的过程中会给object发...

  • Object-C ,runtime原理,oc对象的原理,主要记录

    Object-C-runtime Object-C ,runtime原理,oc对象的原理,主要记录oc对象在底层的...

  • Runtime总结

    参考: Objc Runtime 总结runtime 一, runtime 关联属性 1,设置关联值 object...

  • Runtime梳理(一)消息机制及应用

    Runtime的介绍 Runtime消息的传递和转发 Runtime的应用 1.Runtime的介绍 Object...

  • Object Runtime

    Object Runtime 执行操作 执行结果: 在没有对类做任何操作的情况下,+load 方法会被默认执行,并...

  • iOS Runtime 机制

    runtime 基础介绍 Runtime 中 objc_class , objc_object, objc_cat...

  • iOS Runtime API 集锦

    iOS Runtime API 集锦 runtime 作用其实很多: 1 object_getClass obje...

  • iOS底层原理

    Runtime原理 Objective-C runtime机制(1)——基本数据结构:objc_object & ...

  • Object From runtime

    七夕快到了 Objective-C 对象 每个Objective-C对象都是一个C语言的结构体 在runtime...

  • Object Runtime -- Weak

    零:导读 第一部分:借用 Xcode 找到与 weak 有关的所有内容,并进行整理和归纳,推导出核心的数据结构和方...

网友评论

    本文标题:Object Runtime

    本文链接:https://www.haomeiwen.com/subject/fpjxbttx.html