2010-06-23 1 views
2

Vous pouvez voir ci-dessous dans le fichier NSObject.hComment comprendre NSObject, il est à la fois le protocole et l'interface

// 1. ici est un protocole

@protocol NSObject 

// 2. ici est une interface conforme au protocole ci-dessus

@interface NSObject <NSObject> { 
    ... 

// 3. Quelle est la signification de "()" ci-dessous? NSCoderMethods est un protocole

@interface NSObject (NSCoderMethods) 

NSObject est si important que je dois comprendre, pourquoi est-il conçu comme ça?

Répondre

4

1.

Il est une classe (interface), car toutes les classes concrètes ObjC héritent de nos jours, les mises en œuvre de NSObject, pour soutenir des fonctionnalités telles que comptage de référence et la vérification du type d'exécution.


2.

Maintenant pour le protocole ... il existe parce que NSObject n'est pas la seule classe racine qui prend en charge les -retain et -performSelector: méthodes etc.

Une classe importante est NSProxy, qui agit comme un proxy pour transmettre des messages à certains objets réels.

Les cibles de NSProxy sont généralement des objets NSO, de sorte que l'interface doit également prendre en charge les méthodes -retain et -performSelector: etc. Mais NSProxy ne peut pas hériter de NSObject car il n'existe aucune relation is-a entre les deux.

Pour exprimer la relation fraternelle, les deux sont faits pour adopter le même protocole, qui, malheureusement, aussi appelé NSObject.

Faire NSObject un protocole a également un avantage, les protocoles définis par l'utilisateur peuvent demander à adopter pour soutenir toutes les opérations habituelles NSObject par

@protocol Foo <NSObject> 
... 

3.

It's a category, qui ajoute méthode supplémentaire implémentations à NSObject.

+0

Merci beaucoup. En Java, il y a Object, très similaire à NSObject. Toutes les classes Java héritent de Object. Dans ObjectC, vous devez hériter explicitement de NSObject. – Forrest

Questions connexes