iOS开发技能回顾

load方法和initialize方法异同

2019-10-23  本文已影响0人  猿人

load方法和initialize方法异同

+load方法举例

-新建父类Person类 并在.m里面实现+load方法

#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
#import "Person.h"

@implementation Person
+(void)load
{
    NSLog(@"%s",__func__);
}
@end

继承Person类新建子类Son类 并在.m里面实现+load方法

#import "Person.h"
@interface Son : Person
@end
#import "Son.h"

@implementation Son
+(void)load
{
    NSLog(@"%s",__func__);
}
@end

给父类Person类创建Category 并且在.m里面实现+load方法

#import "Person.h"

@interface Person (Category)
@end
#import "Person+Category.h"

#import <AppKit/AppKit.h>


@implementation Person (Category)
+(void)load
{
    NSLog(@"%s",__func__);
}
@end

运行打印

2019-10-23 11:41:35.366135+0800 load+initialize[1673:96489] +[Person load]
2019-10-23 11:41:35.366666+0800 load+initialize[1673:96489] +[Son load]
2019-10-23 11:41:35.366721+0800 load+initialize[1673:96489] +[Person(Category) load]
2019-10-23 11:41:35.366845+0800 load+initialize[1673:96489] main, Hello World!
Program ended with exit code: 0

+initialize方法举例

在上述Person类.m中实现+(void)initialize方法

#import "Person.h"

@implementation Person
+(void)load
{
    NSLog(@"%s",__func__);
}


+(void)initialize
{
    NSLog(@"%s",__func__);
}

- (instancetype)init
{
    self = [super init];
      if (self) {
             NSLog(@"%s",__func__);
      }
      return self;
}

@end

在main函数中初始化

#import <Foundation/Foundation.h>
#import "Person.h"
 
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"%s, Hello World!",__func__);
        
       Person * person = [[Person alloc]init];
 
        
        
    }
    return 0;
}

------------------------load-----------------------------------------
2019-10-23 12:57:52.431490+0800 load+initialize[2080:126579] +[Person load]
2019-10-23 12:57:52.432133+0800 load+initialize[2080:126579] +[Son load]
2019-10-23 12:57:52.432369+0800 load+initialize[2080:126579] +[Person(Category) load]
2019-10-23 12:57:52.432614+0800 load+initialize[2080:126579] main, Hello World!
------------------------initialize----------------------------------------
2019-10-23 12:57:52.432687+0800 load+initialize[2080:126579] +[Person initialize]
2019-10-23 12:57:52.432841+0800 load+initialize[2080:126579] -[Person init]
Program ended with exit code: 0

这时在Person+Category.m中实现initialize方法 并且运行

#import "Person+Category.h"

#import <AppKit/AppKit.h>


@implementation Person (Category)
+(void)load
{
    NSLog(@"%s",__func__);
}


+(void)initialize
{
    NSLog(@"%s",__func__);
}
@end
------------------------load-----------------------------------------
2019-10-23 13:02:33.317059+0800 load+initialize[2128:128769] +[Person load]
2019-10-23 13:02:33.318109+0800 load+initialize[2128:128769] +[Son load]
2019-10-23 13:02:33.318562+0800 load+initialize[2128:128769] +[Person(Category) load]
2019-10-23 13:02:33.318907+0800 load+initialize[2128:128769] main, Hello World!
------------------------initialize----------------------------------------
2019-10-23 13:02:33.319210+0800 load+initialize[2128:128769] +[Person(Category) initialize]
2019-10-23 13:02:33.319515+0800 load+initialize[2128:128769] -[Person init]
Program ended with exit code: 0

这时在Son类中实现+initialize方法 并且在main函数中初始化并运行

#import "Son.h"

@implementation Son
+(void)load
{
    NSLog(@"%s",__func__);
}



+(void)initialize
{
    NSLog(@"%s",__func__);
}
- (instancetype)init
{
    self = [super init];
    if (self) {
         NSLog(@"%s",__func__);
    }
    return self;
}

@end
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Son.h"
 
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"%s, Hello World!",__func__);
       
            Person * person = [[Person alloc]init];
            
            Son * son = [[Son alloc]init];
        
        
    }
    return 0;
}

------------------------load-----------------------------------------
2019-10-23 13:16:06.456182+0800 load+initialize[2362:141389] +[Person load]
2019-10-23 13:16:06.456668+0800 load+initialize[2362:141389] +[Son load]
2019-10-23 13:16:06.456877+0800 load+initialize[2362:141389] +[Person(Category) load]
2019-10-23 13:16:06.457197+0800 load+initialize[2362:141389] main, Hello World!
------------------------initialize----------------------------------------
2019-10-23 13:16:06.457270+0800 load+initialize[2362:141389] +[Person(Category) initialize]
2019-10-23 13:16:06.457411+0800 load+initialize[2362:141389] -[Person init]
2019-10-23 13:16:06.457516+0800 load+initialize[2362:141389] +[Son initialize]
2019-10-23 13:16:06.457632+0800 load+initialize[2362:141389] -[Person init]
2019-10-23 13:16:06.457724+0800 load+initialize[2362:141389] -[Son init]
Program ended with exit code: 0

这时将main函数里的父类初始化去掉运行

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Son.h"
 
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"%s, Hello World!",__func__);
       
            ///////Person * person = [[Person alloc]init];
            Son * son = [[Son alloc]init];
        
        
    }
    return 0;
}

------------------------load-----------------------------------------
2019-10-23 13:22:37.053879+0800 load+initialize[2414:144467] +[Person load]
2019-10-23 13:22:37.054447+0800 load+initialize[2414:144467] +[Son load]
2019-10-23 13:22:37.054611+0800 load+initialize[2414:144467] +[Person(Category) load]
2019-10-23 13:22:37.054742+0800 load+initialize[2414:144467] main, Hello World!
------------------------initialize----------------------------------------
2019-10-23 13:22:37.054797+0800 load+initialize[2414:144467] +[Person(Category) initialize]
2019-10-23 13:22:37.054842+0800 load+initialize[2414:144467] +[Son initialize]
2019-10-23 13:22:37.054889+0800 load+initialize[2414:144467] -[Person init]
2019-10-23 13:22:37.054929+0800 load+initialize[2414:144467] -[Son init]
Program ended with exit code: 0

好的乘胜追击 这时将分类里的initialize方法去掉 再次运行

#import "Person+Category.h"

#import <AppKit/AppKit.h>


@implementation Person (Category)
+(void)load
{
    NSLog(@"%s",__func__);
}

//
//+(void)initialize
//{
//    NSLog(@"%s",__func__);
//}
@end

------------------------load----------------------------------------
2019-10-23 13:28:14.368976+0800 load+initialize[2484:146913] +[Person load]
2019-10-23 13:28:14.369644+0800 load+initialize[2484:146913] +[Son load]
2019-10-23 13:28:14.369725+0800 load+initialize[2484:146913] +[Person(Category) load]
2019-10-23 13:28:14.369850+0800 load+initialize[2484:146913] main, Hello World!

------------------------initialize----------------------------------------
2019-10-23 13:28:14.369904+0800 load+initialize[2484:146913] +[Person initialize]
2019-10-23 13:28:14.369946+0800 load+initialize[2484:146913] +[Son initialize]
2019-10-23 13:28:14.369993+0800 load+initialize[2484:146913] -[Person init]
2019-10-23 13:28:14.370032+0800 load+initialize[2484:146913] -[Son init]

这时候打开main函数的父类初始化 子类与父类进行多次初始化 并运行

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Son.h"
 
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"%s, Hello World!",__func__);
       
         Person * person = [[Person alloc]init];
            Person * person1 = [[Person alloc]init];
            Person * person2 = [[Person alloc]init];
            Person * person3 = [[Person alloc]init];
   
        Son * son = [[Son alloc]init];
               Son * son1 = [[Son alloc]init];
               Son * son2 = [[Son alloc]init];
               Son * son3 = [[Son alloc]init];
    
        
    }
    return 0;
}
------------------------load-----------------------------------------
2019-10-23 13:46:03.090877+0800 load+initialize[2697:156107] +[Person load]
2019-10-23 13:46:03.091536+0800 load+initialize[2697:156107] +[Son load]
2019-10-23 13:46:03.091603+0800 load+initialize[2697:156107] +[Person(Category) load]
2019-10-23 13:46:03.091728+0800 load+initialize[2697:156107] main, Hello World!
------------------------initialize----------------------------------------
2019-10-23 13:46:03.091937+0800 load+initialize[2697:156107] +[Person initialize]
2019-10-23 13:46:03.092105+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.092155+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.092196+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.092236+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.092276+0800 load+initialize[2697:156107] +[Son initialize]
2019-10-23 13:46:03.092318+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.092371+0800 load+initialize[2697:156107] -[Son init]
2019-10-23 13:46:03.092411+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.092448+0800 load+initialize[2697:156107] -[Son init]
2019-10-23 13:46:03.092487+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.094391+0800 load+initialize[2697:156107] -[Son init]
2019-10-23 13:46:03.094461+0800 load+initialize[2697:156107] -[Person init]
2019-10-23 13:46:03.094511+0800 load+initialize[2697:156107] -[Son init]

总结

load

initialize

上一篇 下一篇

猜你喜欢

热点阅读