1.类:
类的本质:类也是class类型的对象
typedef struct objc_class * Class;
每个类只有一个类对象;
1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类的+load方法;
2.当第一次使用某个类的时候,会调用当前类的+initialize方法;
3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法);
先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法,initialize在第一次使用时加载);
4.分类方法如果有+initialize方法,不会调用原来类的+initialize方法了;
2.description方法:
//类调用+description方法
+(NSString *)description{
return @"Abc";
}
//对象调用+description方法
-(NSString *)description{
//打印自身会引发死循环
//NSLog(@"%@",self);
return [NSString stringWithFormat:@"...."];
}
3.SEL:
1.方法的存储位置:
每个类的方法列表都存储在类对象中
每个方法都有与之对应的SEL类型的对象
根据一个SEL对象就可以找到方法的地址,进而调用方法
2.SEL类型的定义:
typedef struct objc_selector * SEL;
3.SEL对象的创建:
SEL s = @selector(test)
SEL s2 = NSSelectorFromString(@"test");
_cmd == @selector(test)
-(void)test{
//_cmd代表当前方法
[self performSelector:_cmd];//会引发死循环
}