Généralement, Objective-C classe abstraite par convention que si l'auteur des documents d'une classe de base abstraite, il suffit de ne pas l'utiliser sans sous-classement. Il n'existe pas au moment de la compilation de l'application qui empêche l'instanciation d'une classe abstraite, cependant. En fait, il n'y a rien pour empêcher un utilisateur de fournir des implémentations de méthodes abstraites par l'intermédiaire d'une catégorie (c'est à dire au moment de l'exécution). Vous pouvez forcer un utilisateur à au moins remplacer certaines méthodes par le déclenchement d'une exception dans ces méthodes de mise en œuvre dans votre classe abstraite:
[NSException raise:NSInternalInconsistencyException
format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
Si votre méthode retourne une valeur, c'est un peu plus facile à utiliser
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]
userInfo:nil];
comme vous n'avez pas besoin d'ajouter une instruction de retour de la méthode.
Si la classe abstraite est vraiment une interface (c'est à dire n'a pas de méthode concrète mises en œuvre), à l'aide d'un Objectif-C protocole est le plus approprié option.