8
votes

Pourquoi n'est-ce pas une erreur de compilateur de spécifier un protocole mais de ne pas mettre en œuvre les méthodes requises?

dans l'objectif-c, je peux faire quelque chose comme xxx

pour créer la spécification d'une classe MyViewController qui implémente le protocole UITEXTINUPUTDelerate. Maintenant, ce protocole a plusieurs méthodes requises. Je pense donc que le compilateur ne laisserait pas le code compiler du tout à moins que ces méthodes n'avaient en réalité que des implémentations dans le fichier .m. Neuf, cela compile. Le compilateur fait bec avertissements , il est donc évidemment détectant que je n'ai pas implémenté les méthodes requises, mais je me demande pourquoi il est logique de permettre à cela de compiler du tout, de la part de la langue concepteur.


1 commentaires

Ce n'est que parce que Code compile ne signifie pas qu'il ne peut pas se bloquer. Le compilateur laissera toutes sortes de bugs à travers. Un débogueur est ce que vous êtes après.


3 Réponses :


9
votes

Vous obtenez une erreur de compilateur lorsque le code ne peut pas être compilé. Ne pas mettre en œuvre une méthode n'empêche pas le code d'être compilé car l'objectif-c est une langue dynamique. Cela signifie que les méthodes ne sont pas directement liées, leur emplacement n'a donc pas besoin d'être connu au moment de la compilation. Les avertissements signifient que quelque chose pourrait causer des erreurs au moment de l'exécution, mais que le code a compilé avec succès.


0 commentaires

2
votes

Comme Ughoavgfhw a souligné, ce n'est pas une erreur car la nature dynamique de la langue permet de faire ajouter ces méthodes au moment de l'exécution. Ce n'est pas parce que la méthode n'est pas trouvée au moment de la compilation ne signifie pas que ce ne sera pas là au moment de l'exécution.


0 commentaires

4
votes

Si vous souhaitez activer cet avertissement en une erreur, ajoutez simplement -werror = protocole dans Autre drapeau d'avertissement dans les paramètres de construction .

 Entrez la description de l'image ici


1 commentaires

C'est la réponse utile