Objective-c 基础知识

转载自: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、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只能判断个实例是否属于某个类 不能判断是否属于某个父类

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


你可能感兴趣的:(Objective-c 基础知识)