类继承下来的初始化有三种:
+(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. Binary to Text (ASCII) Conversion

    Binary to Text (ASCII) Conversion Description: Write a function that takes in a binary string and re ...

  2. 表达式求职JAVA(转)

    下面将练习大量的树操作 package 乒乒乓乓; import java.io.ObjectInputStream.GetField; import java.util.ArrayList; imp ...

  3. 韦东山yy公开课笔记(2)--汇编,段,栈,重定位/链接地址,位置无关吗

    1. 要不要学习汇编 可以只懂一点,工作中基本不用,一旦用就是出了大问题 ldr : load 读内存 ldr r0, [r1]  : r1里存放的是地址值, 去这个地址读取4字节的内容,存入r0 s ...

  4. shell if语句

    方法1: if list :then    #注意,这里是因为放一行了,所以要有";",如果then在下一行就不用“:”了          do something here   ...

  5. aix i节点

    文件系统与inode• UNIX文件系统有很多种类型,如HFS,NFS,JFS,CDFS.虽然文件系统种类很多,但是也有着一些相同的数据结构:超级块.inode.目录等等. • inode译成中文就是 ...

  6. T-SQL XQuery (XML路径查询) (转)http://blog.csdn.net/Beirut/article/details/8150116

    /* T-SQL 支持用于查询 XML 数据类型的 XQuery 语言的子集. XQuery 基于现有的 XPath 查询语言,并支持更好的迭代.更好的排序结果以及构造必需的 XML 的功能. 在前面 ...

  7. C语言之Static

    1.全局静态变量 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量. 1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化的全局静态变量 ...

  8. BZOJ1901 - Dynamic Rankings(树状数组套主席树)

    题目大意 给定一个有N个数字的序列,然后又m个指令,指令种类只有两种,形式如下: Q l r k 要求你查询区间[l,r]第k小的数是哪个 C i t  要求你把第i个数修改为t 题解 动态的区间第k ...

  9. 使用Git push时出现的一些问题处理

    1.第一个问题 Permission denied (publickey). fatal: Could not read from remote repository. Please make sur ...

  10. 使用ajax代替iframe

    相信大多数程序员都跟iframe打过交道,iframe简单,好用.在我用的过程中比较苦逼的是关于iframe高度的设置. 由于子页面内容不确定,页面高度也不确定.于是开始网上的各种搜索,一般有两种:一 ...