+ (void)load;//class methods

+ (void)initialize;  //class methods

- (id)init;

这几个方法的区别是什么?:The class methods ​​initialize​​ and ​​load​​ give classes a chance to initialize themselves.






NSObject构架



协议与类


·      包含协议:NSObject、NSCopying、NSMutableCopying、NSCoding

·      NSObject类默认只实现了NSObject协议,如果用户需要其他协议功能则需要自己实现该协议。



初始化、析构



load


+(void) load  

作用:类加载到运行时环境时发送该消息

说明:

·      在类没有实例化对象的时候,该函数就已经被调用了

·      即使一个类没有被程序使用,它也会加载到运行时环境



initialize


+ (void)initialize;

作用:在类第一次使用的时候发送该消息

说明:父类会被先掉,所以子类initialize函数不需要发送父类initialize消息。



alloc


+ (id)alloc;

作用:返回一个已经分配好内存的实例



init


- (id)init;

作用:对已经分配了内存的实例进行初始化(相当于构造函数),不一定要默认的构造函数,也可以自己写(一般就是加一些参数)。

常见形式:


- (id)init{

    self = [super init];

    //........初始化...............

    return self;

}


 



new


+ (id)new;

作用:同时调用了alloc和init。



dealloc


- (void)dealloc;

作用:析构函数



拷贝



copyWithZone


+ (id)copyWithZone:(NSZone *)zone;

作用:拷贝函数。类中重载改函数,copy的时候会调用该函数

说明:

·      该函数是NSCopy协议的函数

·      c++的拷贝构造函数是把外部的值拷进来,旨在构造。而copyWithZone:函数将自己拷贝一份送给外面,旨在送出拷贝。

sample:


MyClass:NSObject



MyClass2:MyClass



-(id)copyWithZone:(NSZone *)zone

{

    MyClass *copy = [MyClass new];

    copy->test = self->test;

    return copy;

}



-(id)copyWithZone:(NSZone *)zone

{

    MyClass2* copy = [super copyWithZone:zone];

    copy->test2 = self->test2;

    return copy;

}


 



copy


- (id)copy;

作用:发送接收者定义的copyWithZone:nil消息;




mutableCopyWithZone


 

+ (id)mutableCopyWithZone:(NSZone *)zone;

作用:和copyWithZone一样起拷贝作用;

说明:

·      与copyWithZone不同的是它用于返回一个可变类型(如果你希望从一个[不可变类型或可变类型]变成[可变类型],则重载改函数)

·      改函数NSMutableCopying协议的函数




mutableCopy


- (id)mutableCopy;

作用:调用mutableCopyWithZone:nil






运行时状态


说明:运行时状态可以在运行时获得对象的层次关系,确定对象是否实现某写方法,测试协议等。在写框架的时候很有用。




class


- (Class)class;

+ (Class)class;

作用:返回当前对象所属类




superclass


- (Class)superclass;

+ (Class)superclass;

作用:返回当前对象的父类




isKindOfClass


- (BOOL)isKindOfClass:(Class)aClass;

作用:判定receiver是否为aClass或其子类的实例




isMemberOfClass


- (BOOL)isMemberOfClass:(Class)aClass;

作用:判定receiver是否为aClass的实例




isSubclassOfClass


+ (BOOL)isSubclassOfClass:(Class)aClass

作用:判定是否为aClass的子类

说明:只有类方法




respondsToSelector


- (BOOL)respondsToSelector:(SEL)aSelector;

作用:判断receiver是否响应某消息

注意:  不包括类方法




instancesRespondToSelector


+ (BOOL)instancesRespondToSelector:(SEL)aSelector;

作用:判断类的对象是否响应某消息

注意:不包括类方法




conformsToProtocol


- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

作用:判断是否实现某协议

说明:参数可以用@protocal(协议名称)制作




description


- (NSString*)description;

作用:返回一串对象的描述,描述中包含了对象的详细信息(方便用于调试)






比较


要重载比较最好先重载-(NSComparisonResult)compare:(id)object




hash


- (NSUInteger)hash;

作用:返回一串数,代表对象的hash值




isEqual


 

- (BOOL)isEqual:(id)object;

作用:比较两个对象是否相同

说明:默认是用地址进行比较,且hash值一定要相同






对象编解码


 

§  如果对象需要归档(保存到文件中)时,我们需要定义编解码函数,告诉程序对象的哪些属性需要按什么顺序保存;哪些数据是要读取的,读取后存在哪些变量中。

§  通常需要配合NSArchiver和NSUnarchiver使用




encodeWithCoder


- (void)encodeWithCoder:(NSCoder *)aCoder;

作用:定义对象的编码,即对象的哪些属性是需要保存下来的




initWithCoder


- (id)initWithCoder:(NSCoder *)aDecoder;

作用:定义对象的解码,即取出的每一条属性要存放到哪些变量中,进而初始化对象

注意:对象的属性要retain下来




对象内存管理


- (id)retain;                        //引用次数+1

- (onewayvoid)release;           //引用次数-1

- (id)autorelease;                  //引用次数-1,且向autorelase pool发送消息

- (NSUInteger)retainCount;      //返回当前引用次数

说明:详情见《内存管理》




其他


 

§  消息的转发。forwardInvocation:和相关的方法允许一个对象将消息转发给另一个对象。

§  消息的派发。以performSelector...开头的一组方法使您可以在指定的延迟后派发消息,以及将消息从辅助线程派发(同步或异步)到主线程。

NSObject还有几个其它的方法,包括一些处理版本和姿态(后者使一个类在运行时将自己表示为另一个类)的类方法,以及一些访问运行时数据结构的方法,比如方法选择器和指向方法实现的函数指针。



​isKindOfClass:​​ and ​​isMemberOfClass:​​; the latter method is for testing whether the receiver is an instance of the specified class. The class method​ ​isSubclassOfClass:​​ tests class inheritance.

这三个函数的区别

iskindofclass可以判断某个实例是否属于某个类或者子类

isMemberOfClass只能判断个实例是否属于某个类 不能判断是否属于某个父类

isSubclassOfClass判定是否为某个类的子类