ios - - (id)copyWithZone: 和 + (id)copyWithZone: 的区别???
大家讲道理
大家讲道理 2017-04-17 17:46:33
0
3
505

两个协议:
// @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:,求大神指教???

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(3)
洪涛

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

いいねを押す +0
大家讲道理

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

いいねを押す +0
巴扎黑

質問(3)

リーリー リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート