検索

ホームページ  >  に質問  >  本文

ios - - (id)copyWithZone: 和 + (id)copyWithZone: 的区别???

两个协议:
// @protocol NSCopying
// - (id)copyWithZone:(nullable NSZone *)zone;
// @end

// @protocol NSMutableCopying
// - (id)mutableCopyWithZone:(nullable NSZone *)zone;
// @end

下面是NSObject.h 头文件中的:
// + (id)copyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
// + (id)mutableCopyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;

// - (id)copy;
// - (id)mutableCopy;

问题:
(1)- (id)copyWithZone: 和 + (id)copyWithZone:的区别,+ (id)copyWithZone:一般用在什么地方???
(2)我尝试[NSString copy]; 直接用NSString类执行copy操作,也不会报错,- (id)copy;不是对象方法吗???为什么可以当作类方法来使用???
(3)自定义单例类的时候,一般重写- (id)copyWithZone: 还是 + (id)copyWithZone:,求大神指教???

大家讲道理大家讲道理2893日前511

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-17 17:48:33

    公式ドキュメント「このメソッドは、NSCopying プロトコルに準拠するオブジェクトが必要な状況でクラス オブジェクトを使用できるようにするために存在します。たとえば、このメソッドを使用すると、クラス オブジェクトを NSDictionary オブジェクトのキーとして使用できます。このメソッドをオーバーライドしないでください。』
    上記を読むと、実際には非常に明確です。
    +copy と +copyWithZone は、クラス オブジェクト (クラス obj) を提供して、クラス オブジェクトをコンテナーに挿入できるようにするために存在します。また、クラス オブジェクトのコピーは 1 つだけグローバルに存在できるため、+copy メソッドと +copyWithZone メソッドは単に self を返します。 NSObject は copy クラス メソッドを実装しますが、ヘッダー ファイルには含まれていません。
    これを理解すれば、必要なのはオブジェクト メソッドを検討することだけです。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:48:33

    + はクラス メソッド、- はオブジェクト メソッドです。
    + クラス名を使用して直接呼び出すことができます。
    - インスタンス化されたクラス オブジェクトを使用して呼び出す必要があります。
    シングルトン クラスは、保持されているクラスによってオーバーライドされます。オブジェクト - 以上です

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:48:33

    質問(3)

    リーリー リーリー

    返事
    0
  • キャンセル返事