+ (void)load和+ (void)initialize有什么用处

两个方法都可以进行一些类的初始化操作。其中有些小区别。
+(void)load 方法只要加入了工程种,进行了编译,且.m中实现了这个方法,都会调用一次,值得注意的时没实现的子类是不会调用的,就算父类实现了也不行。categories,都实现了这个方法,只会调用其中一个,具有不确定性。
+(void)initialize 在发送第一条消息给类的时候进行调用,跟load方法的不同之处在于,比较迟,可实现懒加载,且父类.m实现了该方法,子类不实现也会调用父类,跟正常的方法一样。
参考:http://stackoverflow.com/questions/13326435/nsobject-load-and-initialize-what-do-they-do

时间: 2024-12-28 02:25:17

+ (void)load和+ (void)initialize有什么用处的相关文章

+ (void)load 和 + (void)initialize

+ (void)load 方法在类加载到内存的时候会调用. 运行程序,先加载系统的类到内存,然后加载自定义的类到内存.这个时候被加载的类的+ (void)load方法都会被执行. 然后类加载完成之后,才会调用 (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法. + (void)initialize.在第一次实例化一个类的时候会调

OC 中 load 方法和 initialize 方法的异同

+ (void)load; 当类对象被引入项目时, runtime 会向每一个类对象发送 load 消息 load 方法会在每一个类甚至分类被引入时仅调用一次,调用的顺序:父类优先于子类, 子类优先于分类 load 方法不会被类自动继承 + (void)initialize; 也是在第一次使用这个类的时候会调用这个方法

iOS load方法与initialize方法

在 iOS 开发中,我们经常会使用 +load 方法来做一些在 main 函数之前的操作,比如方法交换(Method Swizzle)等.现在分析一下load方法跟initialize方法的调用顺序以及区别. 1.先看下load方法 尝试定义一个继承自 NSObject 的 Person 类,并对其添加两个分类 Life 和 Work:再定义一个 Student 类继承自 Person,并对其添加 School 分类.在以上所有类和分类中,均实现 +load: #import "Person.h

void类型及void指针

1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指针类型的使用方法与技巧. 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据. void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: void a; 这行语句编译时会出错,提示“illegal use of typ

void *memmove( void* dest, const void* src, size_t count );数据拷贝,不需要CPU帮助

分享到 腾讯微博 QQ空间 新浪微博 人人网 朋友网 memmove 编辑词条 编辑词条 --> memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中.但复制后src内容会被更改.但是当目标区域与源区域没有重叠则和memcpy函数功能相同. 快速导航 目录 1函数简介 2程序示例 大事记 光影集锦 图册集锦 花絮视频 1函数简介 原型:void *memmove( void* dest,

iOS开发-OC篇 load方法 和 initialize方法比较

Load方法 和 initialize方法的比较    在OC语言中,我们相比之下对于load和initialize方法的使用比较少,所以会不是很清楚的了解二者的用途和区别,所以整理了一下,和大家进行分享,有所得不对的地方,希望能够指出来,多谢! 1.load方法特点: 1> 当类被引用进程序的时候会执行这个函数 2> 一个类的load方法不用写明[super load],父类就会收到调用,并且在子类之前. 3> Category的load也会收到调用,但顺序上在主类的load调用之后.

iOS开发-类的加载load函数和initialize函数

简要概括 load是类加载方法,initialize是类初始化方法. 要点 不需要调用super的方法. initialize和load方法系统只调用一次,开发者可以多次调用(可以,但是不建议). 类加载到系统调用load方法,类首次使用调用initialize方法. initialize和load的方法不要添加太多逻辑,类比不要在初始化方法做太多操作. initialize中可以实现无法在编译期初始化的全局变量,load的方法中可以实现swizzling的逻辑. load的调用并不视为类的第一

void (*Pfun(int, void(*Qfun)(int))) (int)

#include <iostream> using namespace std; typedef void(*PF)(int); void fun(int a) { cout << "这里是参数是整形的函数fun(int)" << endl; } void Printf(int a) { cout << "这里是参数是整形的函数Printf(int)" << endl; } void(*Pfun(int,

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

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