转载自:http://blog.csdn.net/namehzf/article/details/6894090
+ (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构架
协议与类
· 包含协议: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 methodisSubclassOfClass:
tests class inheritance.
这三个函数的区别
iskindofclass可以判断某个实例是否属于某个类或者子类
isMemberOfClass只能判断个实例是否属于某个类 不能判断是否属于某个父类