object c load(相当于java的静态代码块)和initialize (相当于java中的构造代码块)

//
//  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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值