2010-06-08 2 views

Répondre

0

Vous pourriez être confus quant à ce que signifie "hacher" dans ce contexte. Hash est juste un nombre que les classes de collection Cocoa utilisent en interne pour améliorer les performances. NSObject implémente cette méthode, donc vous ne devez jamais la surcharger sauf si un algorithme de hachage meilleur et plus significatif entraîne de meilleures performances lors de la comparaison/recherche d'objets dans un tableau ou un dictionnaire.

Étant donné qu'aucun objet ne doit mettre en cache ses valeurs de hachage sur le disque, le commentaire implique simplement que vous ne devez pas vous fier aux valeurs de hachage concrètes renvoyées par les classes d'Apple. Il est considéré comme un détail d'implémentation mineur. NSDictionary conserve ses valeurs mais copie les clés.

Vous n'avez donc rien à faire pour conserver vos vues dans un dictionnaire en tant que valeurs, mais si vous souhaitez utiliser les vues en tant que clés, vous devez implémenter la méthode -copyWithZone:.

En savoir plus dans la documentation d'Apple.

+0

Oui, je n'ai pas spécifié dans la question d'origine, mais je veux utiliser les vues comme des clés. Fondamentalement, j'essaie de garder un tas de métadonnées sur plusieurs types de vues différents et je dois être capable de rechercher les métadonnées données à l'objet. Êtes-vous en train de dire que je DOIT sous-classer et remplacer la méthode copyWithZone: pour faire cela? N'y a-t-il pas d'autre moyen? –

+0

@Daniel Weber: Si vous voulez utiliser NSDictionary, oui, vous devez accepter le comportement de NSDictionary. Je pense cependant que la meilleure question est de savoir pourquoi vous essayez de garder des métadonnées sur les points de vue. Normalement, dans un tel cas, les vues représenteraient des objets de modèle, et il serait plus logique de stocker les métadonnées dans la couche modèle. – Chuck

+0

Oui, quand on le dit comme ça, ça n'a pas de sens. Cependant, je travaille sur un programme de type Interface Builder et j'utilise beaucoup de contrôles standard différents (boutons, champs de texte, etc.). Quand on est cliqué dans mon programme, je dois pouvoir accéder à certaines propriétés personnalisées à propos de ce contrôle. J'essayais d'éviter de tout sous-classer parce que tout ce dont j'ai vraiment besoin est de deux chaînes supplémentaires et des propriétés int, je ne redéfinis aucun comportement. Le sous-classement est-il vraiment le meilleur moyen? –

Questions connexes