暂时只先备注这些. 后面学到再补充.
来自:
https://www.douban.com/note/320064382/
Class类型和int、char、id一样也是一种类型,用于存储类对象的指针,class类型和id类型一样,本身继承于指针类型,故在声明class类型变量时时不需要用星号的。
Class aclass = [someClass class];代码第一个Class是数据类型,aclass是变量名,等号右边的class是类方法能够获得类的相关信息。
自己的代码试验:
#import<Foundation/Foundation.h>
@interface Person:NSObject
@end
@implementation Person
@end
int main(int argc,char *argv[]){
@autoreleasepool{
Person* person1=[Person new];
//①
Class class1=NSClassFromString(@"NSDate"); //这里的参数只能放类名,不能放实例!
NSLog(@"%@",class1);
//②
id test1=[class1 new]; //这两句话效果是一样的
NSLog(@"%@",test1); //因为上面class1接收了NSDate类,现在class1就相当于NSDate这个类
NSDate* test2=[NSDate new];
NSLog(@"%@",test2);
//③
NSLog(@"%@",[person1 class]); //对一个实例执行class方法(又叫发送class消息)可获取其所属类的名字
//④
NSLog(@"%@",NSDate.class);
//⑤
NSDate* date=[NSDate new];
NSLog(@"%@",[date class]); //返回的是__NSDate ,导致下面的不相等,以后再研究为什么
NSLog(@"%d",[date class]==NSDate.class); //不相等
NSLog(@"%d",[NSDate class]==NSDate.class); //相等
}
return 0;
}