前言:OC中类其实也是一个对象,这个对象为Class类型。当程序运行时,会先给类对象分配一块内存,程序会自动调用相关方法让我们监听动作。
一、+ (void)Load:当程序第一次运行时,会加载项目中所有的类,当类加载完毕后会调用+load方法。
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
@implementation Person
+ (void)load {
NSLog(@"Person Load");
}
@end
@interface Student : Person
@end
@implementation Student
+ (void)load {
NSLog(@"Student Load");
}
@end
@interface Person(J)
@end
@implementation Person (J)
+ (void)load {
NSLog(@"J Load");
}
@end
int main() {
//主函数没有调用Person方法但还是会调用类的load方法
return 0;
}</span>
----------------------------------------------------------------------------------------------------------------------------------------------------------
二、+ (void) initialize:类对象的初始化方法,当第一次使用类时,会调用这个方法。
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
@implementation Person
+ (void)initialize {
NSLog(@"Person initialize");
}
@end
@interface Student : Person
@end
@implementation Student
+ (void)initialize {
NSLog(@"Student initialize");
}
@end
@interface Person(J)
@end
@implementation Person (J)
+ (void)initialize { //会覆盖掉Person类本身的initialize方法
NSLog(@"J initialize");
}
@end
int main() {
Student *s = [[Student alloc] init]; //当使用到这个类时,会先加载父类initialize,再加载子类的该方法,如果该类的分类也重写了该方法,那么就不会调用本类的方法,而是该分类的方法
return 0;
}</span>
注意:如果该类的分类也重写了initialize方法,那么就不会调用本类的方法,而加载该分类的方法。
----------------------------------------------------------------------------------------------------------------------------------------------------------
三、description
1、- (NSString *)description:对象方法。配合NSLog并重写该方法可以一次性输出对象的所有信息。
我们知道,NSLog中打印一个OC对象用%@。
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,assign)int age;
@property(nonatomic,retain)NSString *name;
@end
@implementation Person
- (NSString *)description {
return [NSString stringWithFormat:@"年龄=%d,姓名=%@",_age,_name]; //重新定义输出格式
}
@end
int main() {
Person *p = [[Person alloc]init];
p.age = 10;
p.name = @"张三";
NSLog(@"%@",p); //一次性输出所有信息
return 0;
}</span>
----------------------------------------------------------------------------------------------------------------------------------------------------------
2、+ (NSString *)description:对象方法,功能同上,区别在于打印输出类的信息
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,assign)int age;
@property(nonatomic,retain)NSString *name;
@end
@implementation Person
+ (NSString *)description {
return @"Person"; //打印输出类的信息
}
@end
int main() {
Class P = [Person class];
NSLog(@"%@",P); //根据重新方法输出相关信息
return 0;
}</span>
注意:不要在description里面输出self,因为会无限调用,引发死循环。