//
// main.m
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Child.h"
#import "Parent.h"
int main(int argc, const char * argv[]) {
//+++++++++++++注意main 方法是在load 和initlize中间调用,但是main中的autoreleasepool 是在initlize之后调用的++++++++++++++++++++
NSLog(@"Main 方法被执行了");
@autoreleasepool {
//load 和initlize 相当于是java 中的静态代码块,构造代码块类似,load 相当于是静态代码块,initlize 相当于是构造代码块
//http://blog.csdn.net/rodulf/article/details/52748295
//java中的执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。
//先根据创建一个parent 类,然后是child类,
//然后是child的分类,command+n,然后选择object-c file,然后是 class child,
//load方法是一个类方法,是会被我们系统自动调用的,而这个方法的调用就是看文件是否被装载,只要是在我们compile source中出现的,总是会被我们的程序装载的,load方法总是在main函数之前被调用的。
//compile source 可以通过点击左侧的蓝色的标志的,然后点击build pharse,然后点击compile source
//这个load 就相当于是java中的静态代码块
//在parent ,child类中重写,在child分类load中重写,最后调用的顺序是parent -》child-》child的分类,注意了所有的子类执行完了,才执行分类里面的load方法,分类一定是这里面最后调用的。
//load方法是线程安全的,使用了锁
//inilize main函数调用之后,只会调用一次,就是惰性调用机制,有利于去节约资源
//inilize主要用来初始化全局变量和静态变量的,看名字就知道了
//主要应用于不方便在编译器进行初始化的对象进行赋值
//NSMutableArray 依赖于runtime的消息发送
Child *child =[[Child alloc]init];
}
return 0;
}
首先创建parent,child,child的分类,和other的类
parent:
//
// Parent.h
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Parent : NSObject
@end
//
// Parent.m
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Parent.h"
@implementation Parent
static int number = 0;
static NSMutableArray *mutableArray;
//重写
+(void)load{
NSLog(@"parent load 方法");
}
//重写,被调用一定是使用的时候
+ (void)initialize
{
//注意这里需要用if来判断,如果不用if来判断,
//那么如果child 没有重写这个方法,child 也会调用这里的方法的
if(self == [Parent class]){
NSLog(@"parent Initailize 方法被调用了");
}
mutableArray = [NSMutableArray array];
}
@end
child:
//
// Child.h
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Parent.h"
@interface Child : Parent
@end
//
// Child.m
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Child.h"
@implementation Child
//重写
+(void)load{
NSLog(@"child load 方法");
}
//重写,被调用一定是使用的时候
+ (void)initialize
{
NSLog(@"child Initailize 方法被调用了");
}
@end
//
// Child+Load.h
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Child.h"
@interface Child (Load)
@end
//
// Child+Load.m
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Child+Load.h"
@implementation Child (Load)
//重写
+(void)load{
NSLog(@"child load 分类 方法");
}
@end
//
// Other.h
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Other : NSObject
-(void) printName;
+(void) originalFunc;
@end
//
// Other.m
// LoadAndInitialDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Other.h"
@implementation Other
static NSString *name;
//重写
+(void)load{
name = @"Other";
NSLog(@"Other load 方法");
}
-(void)printName{
NSLog(@"%@",name);
}
@end