//
// Animal.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Animal : NSObject
@end
//
// Animal.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Animal.h"
@implementation Animal
/**
* 类被加载的时候调用(程序启动的时候,会加载项目中的所有类)
*/
+(void)load{
NSLog(@"类被加载 Animal load");
}
/**
* 类被第一次使用的时候,会调用
*/
+(void)initialize{
NSLog(@"类第一次被调用 Animal initialize");
}
@end
//
// Animal+Mammal.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Animal.h"
@interface Animal (Mammal)
@end
//
// Animal+Mammal.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Animal+Mammal.h"
@implementation Animal (Mammal)
/**
* 类被加载的时候调用(程序启动的时候,会加载项目中的所有类)
*/
+(void)load{
NSLog(@"类被加载 Animal (Mammal) load");
}
/**
* 类被第一次使用的时候,会调用
*/
+(void)initialize{
NSLog(@"类第一次被调用 Animal (Mammal) initialize");
}
@end
//
// Animal+NotMammal.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Animal.h"
@interface Animal (NotMammal)
@end
//
// Animal+NotMammal.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Animal+NotMammal.h"
@implementation Animal (NotMammal)
/**
* 类被加载的时候调用(程序启动的时候,会加载项目中的所有类)
*/
+(void)load{
NSLog(@"类被加载 Animal (NotMammal) load");
}
/**
* 类被第一次使用的时候,会调用
*/
+(void)initialize{
NSLog(@"类第一次被调用 Animal (NotMammal) initialize");
}
@end
//
// Dog.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Animal.h"
@interface Dog : Animal
@end
//
// Dog.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Dog.h"
@implementation Dog
/**
* 类被加载的时候调用(程序启动的时候,会加载项目中的所有类)
*/
+(void)load{
NSLog(@"类被加载 Dog load");
}
/**
* 类被第一次使用的时候,会调用
*/
+(void)initialize{
NSLog(@"类第一次被调用 Dog initialize");
}
@end
//
// Cat.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/25.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Animal.h"
@interface Cat : Animal
@end
//
// Cat.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/25.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Cat.h"
@implementation Cat
/**
* 类被加载的时候调用(程序启动的时候,会加载项目中的所有类)
*/
+(void)load{
NSLog(@"类被加载 Cat load");
}
/**
* 类被第一次使用的时候,会调用
*/
+(void)initialize{
NSLog(@"类第一次被调用 Cat initialize");
}
@end
1⃣️
//
// main.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h"
#import "Animal+Mammal.h"
#import "Animal+NotMammal.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
}
return 0;
}
2015-09-25 01:32:19.266 OCStudy[1154:453344] 类被加载 Animal load
2015-09-25 01:32:19.267 OCStudy[1154:453344] 类被加载 Cat load
2015-09-25 01:32:19.267 OCStudy[1154:453344] 类被加载 Dog load
2015-09-25 01:32:19.268 OCStudy[1154:453344] 类被加载 Animal (Mammal) load
2015-09-25 01:32:19.268 OCStudy[1154:453344] 类被加载 Animal (NotMammal) load
2⃣️2⃣️
//
// main.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h"
#import "Animal+Mammal.h"
#import "Animal+NotMammal.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Cat *cat1 = [[Cat alloc]init];
// Cat *cat2 = [[Cat alloc]init];
//
// Dog *dog1 = [[Dog alloc]init];
// Dog *dog2 = [[Dog alloc]init];
//
// Animal *animal = [[Animal alloc]init];
}
return 0;
}
2015-09-25 01:32:58.831 OCStudy[1162:458673] 类被加载 Animal load
2015-09-25 01:32:58.832 OCStudy[1162:458673] 类被加载 Cat load
2015-09-25 01:32:58.833 OCStudy[1162:458673] 类被加载 Dog load
2015-09-25 01:32:58.833 OCStudy[1162:458673] 类被加载 Animal (Mammal) load
2015-09-25 01:32:58.833 OCStudy[1162:458673] 类被加载 Animal (NotMammal) load
2015-09-25 01:32:58.834 OCStudy[1162:458673] 类第一次被调用 Animal (NotMammal) initialize
2015-09-25 01:32:58.834 OCStudy[1162:458673] 类第一次被调用 Cat initialize
3⃣️3⃣️3⃣️
//
// main.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Cat *cat1 = [[Cat alloc]init];
Cat *cat2 = [[Cat alloc]init];
//
// Dog *dog1 = [[Dog alloc]init];
// Dog *dog2 = [[Dog alloc]init];
//
// Animal *animal = [[Animal alloc]init];
}
return 0;
}
2015-09-25 01:34:45.439 OCStudy[1194:466947] 类被加载 Animal load
2015-09-25 01:34:45.440 OCStudy[1194:466947] 类被加载 Cat load
2015-09-25 01:34:45.440 OCStudy[1194:466947] 类被加载 Dog load
2015-09-25 01:34:45.441 OCStudy[1194:466947] 类被加载 Animal (Mammal) load
2015-09-25 01:34:45.441 OCStudy[1194:466947] 类被加载 Animal (NotMammal) load
2015-09-25 01:34:45.442 OCStudy[1194:466947] 类第一次被调用 Animal (NotMammal) initialize
2015-09-25 01:34:45.442 OCStudy[1194:466947] 类第一次被调用 Cat initialize
4⃣️4⃣️4⃣️4⃣️
//
// main.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Cat *cat1 = [[Cat alloc]init];
Cat *cat2 = [[Cat alloc]init];
Dog *dog1 = [[Dog alloc]init];
Dog *dog2 = [[Dog alloc]init];
// Animal *animal = [[Animal alloc]init];
}
return 0;
}
2015-09-25 01:36:30.626 OCStudy[1234:478911] 类被加载 Animal load
2015-09-25 01:36:30.627 OCStudy[1234:478911] 类被加载 Cat load
2015-09-25 01:36:30.627 OCStudy[1234:478911] 类被加载 Dog load
2015-09-25 01:36:30.627 OCStudy[1234:478911] 类被加载 Animal (Mammal) load
2015-09-25 01:36:30.627 OCStudy[1234:478911] 类被加载 Animal (NotMammal) load
2015-09-25 01:36:30.628 OCStudy[1234:478911] 类第一次被调用 Animal (NotMammal) initialize
2015-09-25 01:36:30.628 OCStudy[1234:478911] 类第一次被调用 Cat initialize
2015-09-25 01:36:30.628 OCStudy[1234:478911] 类第一次被调用 Dog initialize
5⃣️5⃣️5⃣️5⃣️5⃣️
//
// main.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/24.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Cat *cat1 = [[Cat alloc]init];
Cat *cat2 = [[Cat alloc]init];
Dog *dog1 = [[Dog alloc]init];
Dog *dog2 = [[Dog alloc]init];
Animal *animal = [[Animal alloc]init];
}
return 0;
}
2015-09-25 01:37:42.840 OCStudy[1243:486968] 类被加载 Animal load
2015-09-25 01:37:42.842 OCStudy[1243:486968] 类被加载 Cat load
2015-09-25 01:37:42.842 OCStudy[1243:486968] 类被加载 Dog load
2015-09-25 01:37:42.842 OCStudy[1243:486968] 类被加载 Animal (Mammal) load
2015-09-25 01:37:42.843 OCStudy[1243:486968] 类被加载 Animal (NotMammal) load
2015-09-25 01:37:42.844 OCStudy[1243:486968] 类第一次被调用 Animal (NotMammal) initialize
2015-09-25 01:37:42.844 OCStudy[1243:486968] 类第一次被调用 Cat initialize
2015-09-25 01:37:42.844 OCStudy[1243:486968] 类第一次被调用 Dog initialize
总结:
1、当程序启动时,就会加载项目中的所有类和分类,而且加载后会调用每个类和分类中的+load方法,只会调用一次。
2、当第一次使用某个类时,就会调用当前类的+initialize方法