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

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

大家讲道理
大家讲道理

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

répondre à tous(3)
洪涛

Document officiel "Cette méthode existe pour que les objets de classe puissent être utilisés dans les situations où vous avez besoin d'un objet conforme au protocole NSCopying. Par exemple, cette méthode vous permet d'utiliser un objet de classe comme clé d'un objet NSDictionary. Vous devriez ne pas remplacer cette méthode.』
Après avoir lu ce qui précède, c'est en fait très clair.
copy et copyWithZone existent pour servir des objets de classe (class obj) afin que les objets de classe puissent être insérés dans des conteneurs. Et comme une seule copie d'un objet de classe peut exister globalement, les méthodes copy et copyWithZone renvoient simplement self. NSObject implémente la méthode de copie de classe, mais elle ne figure pas dans le fichier d'en-tête.
Sachant cela, les problèmes sont très simples. Tout ce que vous avez à faire est de considérer les méthodes objet.

大家讲道理

est une méthode de classe, - est une méthode objet
peut être appelé directement en utilisant le nom de la classe
- doit être appelé avec l'objet de classe instancié
La classe singleton est remplacée par la classe détenue objet -C'est ça

巴扎黑

Question (3)

- (id)copyWithZone:(NSZone *)zone
{
    return self;
}
- (id)mutableCopyWithZone:(NSZone *)zone
{
    return self;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal