zoukankan      html  css  js  c++  java
  • copyWithZone详解

    copyWithZone详解

      NSObject实现了-copy、+copy、+copyWithZone方法。代码如下:

    + (id)copy {
        return (id)self;
    }
    
    + (id)copyWithZone:(NSZone *)zone {
        return (id)self;
    }
    
    - (id)copy {
        return [(id)self copyWithZone:NULL];
    }

      其中,+copy、+copyWithZone的存在是为类对象(class obj)服务,以便让类对象能够被插入到容器中。又因为类对象全局只能存在一份,所以+copy、+copyWithZone方法只是简单返回self

      对于-copy,此方法存在的意义只是为了方便,里面会直接把-copyWithZone的方法返回。但是NSObject并没有实现-copyWithZone,需要子对象去实现NSCopying协议(即实现-copyWithZone方法)。

      最后NSZone这玩艺儿已经被Apple抛弃,所以NSObject的copy方法中只是传入NULL。

      那么,在实际开发中该如何实现-copyWithZone方法?

        1)对于祖先链上无-copyWithZone方法的情况,本类直接用 alloc来实现。

        2)对于祖先链上有-copyWithZone方法的情况,先调用[super copyWithZone],再用返回的指针对本类的独有数据进行copy。

        3)对于immutable对象,仅仅对本对象retain使得引用计数加1即可。

  • 相关阅读:
    [转载]从零开始学习OpenGL ES之一 – 基本概念
    ios中陀螺仪CoreMotion的使用
    如何在IOS中使用3D UI – CALayer的透视投影
    cocos3d加载3Dmax模型到ios中
    cocos2d 坐标系统参考
    PAT 1029 Median
    PAT 1028 List Sorting
    Linux中的进程调度(二)
    LaTeX学习(一)
    搬家
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3664315.html
Copyright © 2011-2022 走看看