类继承下来的初始化有三种:
+(void)load:
+(void)initialize:
-(instancetype)init:
 
+(void)load:会自动调用(也可手动调用),只要有引用runtime就会自动去调用类的+(void)load方法,就是#import“”
+(void)initialize:会自动调用(也可手动调用),在类的第一个方法被调用前调用。同时也说明runtime对+(void)load的调用并不视为类的第一个方法。
-(instancetype)init:手动调用,需要使用super关键字来调用父类的方法,让父类也完成相同的操作
 
Runtime调用+(void)load时没有autorelease pool
其原因是runtime调用+(void)load的时候,程序还没有建立其autorelease pool,所以那些会需要使用到autorelease pool的代码,都会出现异常。这一点是非常需要注意的,也就是说放在+(void)load中的对象都应该是alloc出来并且不能使用autorelease来释放。
 
+(void)load
+(void)initialize
 
执行时机
1、程序一运行就立即执行;
2、程序运行过程中只会执行一次;
3、如果某个方法只想执行一次,就放在这里
1、在类的方法第一次被调用的时候执行;
2、并非程序一启动就会调用;
 
若自身未定义,是否使用父类的方法
 
分类中的定义
全部执行,但是后于类中的方法
覆盖类中的方法,只执行一个
 
根据这样的特性,在创建工具类时,我们可以使用+(void)initialize来完成一些对象的初始化
 
//--------------------------测试----------------------------------------------------------
定义GATest类:
#import <Foundation/Foundation.h>
@interface GATest : NSObject
+(void)gatest;
-(void)test;
@end
实现:
#import "GATest.h"
@implementation GATest
-(instancetype)init{
    if (self = [super init]) {
        NSLog(@"init......");
    }
    return self;
}
+(void)load{
    NSLog(@"load .... 只要引用了我就会被调用。");
}
+(void)initialize{
    NSLog(@"initialize......");
}
+(void)gatest{
    NSLog(@"调用了GATest类方法");
}
@end
------------------------------------------------------------------------------------
#import <Foundation/Foundation.h>
#import "GATest.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
//        [GATest gatest];
        GATest *gat = [[GATest alloc]init];
//        [gat test];
    }
    return 0;
}
结果:
 
------------------------------------------------------------------------------------

iOS类初始化的更多相关文章

  1. java类初始化顺序

    一.概述 了解类的初始化顺序,可以更灵活.方便的构造一个类. 二.类初始化顺序 2.1 示例 public class InitialOrderTest { public static void ma ...

  2. Java类初始化

    Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于  char.short.byte.int.long.float. ...

  3. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  4. C++与C#对比学习:类初始化

    类和柏拉图的理念世界 我们知道面向对象编程中到处是一个个的类,但类只是个概念性的东西,不是个实体,不占内存,你没实例化之前也不能用它.只有把类实例化成一个对象后,它才是一个真正存在的实体.占有内存,能 ...

  5. [读书笔记] java类初始化

    以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导 ...

  6. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

  7. 从零开始学C++之IO流类库(四):输出流格式化(以操纵子方式格式化 以ios类成员函数方式格式化)

    一.以操纵子方式格式化 数据输入输出的格式控制使用系统头文件<iomanip>中提供的操纵符.把它们作为插入操作符<<的输出对象即可.如setiosflags.setw.set ...

  8. 转:【深入Java虚拟机】之三:类初始化

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17845821 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Jav ...

  9. JAVA基础2——类初始化相关执行顺序

    类初始化相关执行顺序 几个概念说明 代码块的含义与作用 static静态代码块: 一般用于初始化类中的静态变量.比如:给静态的数组或者list变量赋初值.使用static静态代码块进行初始化与直接在定 ...

随机推荐

  1. tlplayer for ios V1.1.1加密测试版本

    2014-06-22 修正稳定性. 大家还是可以从原来的下载地址下载. 此为tlplayer for ios版本,可以播放加密视频与非加密视频. 加密视频下载地址:http://blog.csdn.n ...

  2. Oracle系列之视图

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 创建视图,把tb_Employee表sal<1000的雇员,映射到该视图( view) create or replace vi ...

  3. Web.config配置文件详解(新手必看)

    花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...

  4. [c#美味] Guid ToString 格式知多少?

    在日常编程中,Guid是比较常用的,最常见的使用就是如下所示: string id = Guid.NewGuid().ToString(); 这条语句会生成一个新的Guid并转成字符串,如下: // ...

  5. [Stephen]自定义SimpleAdapter

    作者:AngelDevil 出处:www.cnblogs.com/angeldevil 先看一下构造函数: public SimpleAdapter (Context context, List< ...

  6. java基础全套

    这是我自己早前听课时整理的java基础全套知识  使用于初学者 也可以适用于中级的程序员 我做成了chm文档的类型  你们可以下载  笔记是比较系统全面,可以抵得上市场上90%的学习资料.讨厌那些随便 ...

  7. 【HTML】Beginner8:Table

    1.Table     Abused to lay out pages    The correct use for tables is to do exactly what you would ex ...

  8. bzoj 2434 [Noi2011]阿狸的打字机(fail树+离线处理+BIT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2434 [题意] 按照一定规则生成n个字符串,回答若干个询问:(x,y),问第x个字符串 ...

  9. maven分模块间依赖注意事项

    1.被依赖模块应该先通过 maven -install 命令将该模块打包为jar发布到本地仓库 2.引用的模块通过在pom.xml文件中添加dependence引用 maven -package 将项 ...

  10. MyCat集群部署(HAProxy + MyCat)

    本文档内容的依赖龙果学院<基于Dubbo的分布式系统架构实战>课程 二.软件版本 操作系统:CentOS-6.6-x86_64 JDK版本:jdk1.7.0_72 HAProxy版本:ha ...