基础知识

NSObject

2019-02-12  本文已影响2人  愤怒的八哥

1、加载及初始化类

/** 运行时加载类或分类调用该方法, 每个类只会调用一次 */
+ (void)load {
 
}
 
/** 类实例化使用前需要先初始化, 一个类调用一次, 如果子类没有实现该方法则会调用父类方法 */
+ (void)initialize {
 
}

loadinitialize区别在于:load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有load调用;但即使类文件被引用进来,但是没有使用,那么initialize也不会被调用;load每个类只会调用一次,initialize也只调用一次,但是如果子类没有实现initialize方法则会调用父类的方法,因此作为父类的initialize方法可能会调用多次。

2、分配内存空间及初始化对象

+(id)alloc;
-(id)init;

3、释放对象

-(void)dealloc;

此方法除了在子类中重写的情况外,不允许直接调用。
4、给对象发送消息(执行方法)
1、使用performSelector系列方法
使用performSelector:是运行时系统负责去找方法,在编译时候不做任何校验;因此在使用时必须先使用respondsToSelector:检查对象是否能调用方法,否则可能出现运行崩溃。performSelector:常用于调用运行时添加的方法,即编译时不存在,但是运行时候存在的方法。另外需要注意的是performSelector:系统提供最多接受两个参数的方法,而且参数和返回都是id类型,并不支持基础数据类型(如:int, float等)。
2、使用IMP指针调用
SEL 是方法的索引。IMP是函数指针,指向方法的地址。SELIMP是一一对应的关系,因此我们可以通过修改对应关系达到运行时方法交换的目的。
创建SEL对象两种方法:
1、使用@selector()创建
2、使用NSSelectorFromString()创建
获取方法IMP指针两种方法:
1、- (IMP)methodForSelector:(SEL)aSelector; 实例方法
2、+ (IMP)instanceMethodForSelector:(SEL)aSelector; 类方法
5、复制对象
定义了NSCopying和NSMutableCopying协议
copy拷贝为不可变对象,mutableCopy拷贝为可变变量,copymutableCopy都可理解为复制了一个新对象。虽然copy对静态对象只是引用计数加1,但是并不影响我们对复制前后的对象进行使用。需要注意的是对于容器对象而言,这两个方法只是复制了容器本身,对容器中包含的对象只是简单的指针引用,并没有深层复制。
5、KVC和KVO
定义了 NSKeyValueCoding和NSKeyValueObserving协议。
6、归档
定义了NSCoding协议。
7、提供了判断方法

isEqual
hash
isKindOfClass
isSubclassOfClass
isMemberOfClass
respondsToSelector

8、获取Class

-(Class)class;
+(Class)class;

上一篇 下一篇

猜你喜欢

热点阅读