加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

NS类 - 父类和子类的关系

(2013-05-05 09:45:55)
标签:

nsobject父类和子类的

关系

it

分类: Mac/IOS那些事
 NSObject构架

 1. |--协议与类
·      包含协议:NSObject、NSCopying、NSMutableCopying、NSCoding
·      NSObject类默认只实现了NSObject协议,如果用户需要其他协议功能则需要自己实现该协议。


2. |--初始化 析构
+(void) load 
作用:类加载到运行时环境时发送该消息
说明:
·      在类没有实例化对象的时候,该函数就已经被调用了
·      即使一个类没有被程序使用,它也会加载到运行时环境
+ (void)initialize;
作用:在类第一次使用的时候发送该消息
说明:父类会被先掉,所以子类initialize函数不需要发送父类initialize消息。
+ (id)alloc;
作用:返回一个已经分配好内存的实例
- (id)init;
作用:对已经分配了内存的实例进行初始化(相当于构造函数),不一定要默认的构造函数,也可以自己写(一般就是加一些参数)。
常见形式:
- (id)init{
    self = [super init];
    //........初始化...............
    return self;
}
 + (id)new;
作用:同时调用了alloc和init。
- (void)dealloc;
作用:析构函数



3. |--拷贝
+ (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;
}
 - (id)copy;
作用:发送接收者定义的copyWithZone:nil消息;
+ (id)mutableCopyWithZone:(NSZone *)zone;
作用:和copyWithZone一样起拷贝作用;
说明:
·      与copyWithZone不同的是它用于返回一个可变类型(如果你希望从一个[不可变类型或可变类型]变成[可变类型],则重载改函数)
·      改函数NSMutableCopying协议的函数
- (id)mutableCopy;
作用:调用mutableCopyWithZone:nil

4. |--运行时状态
说明:运行时状态可以在运行时获得对象的层次关系,确定对象是否实现某写方法,测试协议等。在写框架的时候很有用。
- (Class)class;
+ (Class)class;
作用:返回当前对象所属类
- (Class)superclass;
+ (Class)superclass;
作用:返回当前对象的父类
- (BOOL)isKindOfClass:(Class)aClass;
作用:判定receiver是否为aClass或其子类的实例
- (BOOL)isMemberOfClass:(Class)aClass;
作用:判定receiver是否为aClass的实例
+ (BOOL)isSubclassOfClass:(Class)aClass
作用:判定是否为aClass的子类
说明:只有类方法
- (BOOL)respondsToSelector:(SEL)aSelector;
作用:判断receiver是否响应某消息
注意:  不包括类方法
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
作用:判断类的对象是否响应某消息
注意:不包括类方法
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
作用:判断是否实现某协议
说明:参数可以用@protocal(协议名称)制作
- (NSString*)description;
作用:返回一串对象的描述,描述中包含了对象的详细信息(方便用于调试)


5. |--比较

要重载比较最好先重载-(NSComparisonResult)compare:(id)object
- (NSUInteger)hash;
作用:返回一串数,代表对象的hash值
- (BOOL)isEqual:(id)object;
作用:比较两个对象是否相同
说明:默认是用地址进行比较,且hash值一定要相同



6. |--对象编解码
 §  如果对象需要归档(保存到文件中)时,我们需要定义编解码函数,告诉程序对象的哪些属性需要按什么顺序保存;哪些数据是要读取的,读取后存在哪些变量中。
§  通常需要配合NSArchiver和NSUnarchiver使用
- (void)encodeWithCoder:(NSCoder *)aCoder;
作用:定义对象的编码,即对象的哪些属性是需要保存下来的
- (id)initWithCoder:(NSCoder *)aDecoder;
作用:定义对象的解码,即取出的每一条属性要存放到哪些变量中,进而初始化对象
注意:对象的属性要retain下来


7. |--对象内存管理
- (id)retain;                        //引用次数+1
- (onewayvoid)release;           //引用次数-1
- (id)autorelease;                  //引用次数-1,且向autorelase pool发送消息
- (NSUInteger)retainCount;      //返回当前引用次数
说明:详情见《内存管理》


8.|--异常处理
    @try {
        [sq limeter];    //调用一个没有的方法 让他产生错误
    }
    @catch (NSException *exception) {
        NSLog(@"exceptionName:%@,exceptionReason:%@",[exception name],[exception reason]);
         //捕获到异常的名字和原因
    }
    @finally {
        NSLog(@"try catch exeception ..."); //如果没有 就最后输出什么。。


    }


其他
   消息的转发。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判定是否为某个类的子类
 
NSLog(@"output self class name%@",[selfclass]);
 NSLog(@"ouput self super class name%@",[selfsuperclass]);
http://s9/mw690/79fded95gdbeed3cfb0b8&690父类和子类的关系" TITLE="NS类 父类和子类的关系" />


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有