标签:
l 继承
l 分类(Category)
@interface 类名 (分类名称)
// 方法声明
@end
@implementation 类名 (分类名称)
// 方法实现
@end
typedef struct objc_class *Class;
l 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法
l 先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load
l 先加载元原始类,再加载分类
l 不管程序运行过程有没有用到这个类,都会调用+load加载
l 在第一次使用某个类时(比如创建对象等),就会调用一次+initialize方法
l 一个类只会调用一次+initialize方法,先调用父类的,再调用子类的
Class c = [Person class]; // 类方法
或者
Person *p = [Person new];
Class c2 = [p class]; // 对象方法
Class c = [Person class];
Person *p2 = [c new];
使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出
使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出
l 重写-description或者+description方法即可
l 如果在-description方法中使用NSLog打印self
typedef struct objc_selector *SEL;
SEL s = @selector(test);
SEL s2 = NSSelectorFromString(@"test");
// 将SEL对象转为NSString对象
NSString *str = NSStringFromSelector(@selector(test));
Person *p = [Person new];
// 调用对象p的test方法
[p performSelector:@selector(test)];
// 下面的代码会引发死循环
- (void)test {
[self performSelector:_cmd];
}
标签:
原文地址:http://www.cnblogs.com/ljcgood66/p/4968257.html