2017-09-14 7 views
1

J'utilise Xcode9 et j'ai essayé d'analyser le project.Then je suis arrivé la question suivante commeLa propriété du type mutable 'NSMutableDictionary' a l'attribut 'copy'; un objet immuable sera stockée à la place

propriété de type mutable « NSMutableDictionary » a attribut « copie »; un objet immuable sera stockée à la place

S'il vous plaît passer par l'image montre la Analysons question

enter image description here

Comment résoudre ce problème?

+0

pourquoi vous avez utilisé 'copy' –

+0

est-il nécessaire « copie »? une raison pour l'utiliser? –

+0

jak vérifier la réponse –

Répondre

2

En Objective-C, il existe une méthode de copie définie en NSCopying et une autre est mutableCopy, définie en NSMutableCopying. NSDictionary (superclasse de NSMutableDictionary) est conforme à ces deux protocoles.

Mais dans accesseurs de propriété, seule copie est disponible qui utilise la méthode de copie sur NSMutableDictionary pour créer un objet immuable, d'où l'avertissement lorsque vous exécutez l'analyseur statique, parce que vous essayez maintenant de stocker un objet NSDictionary dans une référence NSMutableDictionary.

Si vous appelez une méthode NSMutableDictionary sur cette référence, je pense que l'application devrait tomber en panne.

Pour résoudre ce problème, vous pouvez utiliser strong qui contiendra la référence pour vous. Mais, si vous avez vraiment besoin d'une copie (pour une raison quelconque), vous pouvez écrire votre propre compositeur, quelque chose comme ceci:

@property (nonatomic) NSMutableDictionary *parameters; 

- (void)setParameters:(NSMutableDictionary *)parameters { 
    _parameters = [parameters mutableCopy]; 
} 
+0

puis comment utiliser pouvez-vous ajouter un exemple –

+0

@ Anbu.Karthik: J'ai édité la réponse –

+1

apprécier frère. –