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即可。

  • 相关阅读:
    Web版RSS阅读器(五)——初步完成阅读功能
    袁氏-人物-袁赋城:百科
    汉语-词语-慧根:百科
    汉语-词语-善根:百科
    汉语-词语-阴德:百科
    汉语-词语-福报:百科
    汉语-词语-回响:百科
    汉语-词语-领悟:百科
    汉语-词语-开悟:百科
    汉语-词语-业障:百科
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3664315.html
Copyright © 2011-2022 走看看