1.当程序启动的时候,就会加载项目中的类和分类,而且加载后会调用每个类和分类的+load方法,只会调用一次。先加载原始类,在加载分类,不管程序运行过程有没有用到这个类,都会调用
2.当第一次使用某个类时,就会调用当前类的+initialize方法
3.先加载父类,在加载子类(load 和 initialize方法)
作用:可以监听类的初始化过程,知道类什么时候被使用
+ (void) load
{
NSLog(@"调用了了load方法");
}
//当第一次使用这个类的时候,就会调用一次+initialize方法,也是先加载父类,在加载子类
+ (void)initialize
{
NSLog(@"调用了initialize方法");
}
-description方法:
使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出
+description方法:
使用+NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出
默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>
NSLog(@"%@",p);
1.会调用对象p的-description方法
2.会拿到-description方法的返回值(NSString *)显示到屏幕上
3.-description方法默认返回的是“类名+内存地址”
例如:NSLog(@"%@", p); // 没有重写description之前,会显示<Person 0x100109760>
可以通过重写description方法修改NSLog的默认输出:
重写-description或者+description方法即可
例如:-(NSString *)description
{
//NSLog(@"%@",self);//这个代码会引发死循环
return [NSString stringWithFormat:@"age = %d, name=%@", _age, _name];
} //重写description方法使之按照固定格式输出,调用时,会将description方法的返回值(NSString*)显示到屏幕上
死循环陷阱:如果在-description方法中使用NSlog打印self
|
|