Les Méthodes privées en Objective-C, Xcode 4.3 je n'ai plus besoin de les déclarer dans mon fichier de mise en oeuvre ?
J'ai beaucoup de points d'interrogation de péage au-dessus de ma tête.
Ce que je ne comprends pas, c'est avant de xcode 4.3 j'avais besoin de déclarer sa déclaration (pour les méthodes privées) dans mon fichier d'implémentation.
Comme dans mon .m fichier:
//deleting this with xcode 4.3 the below code still does work
//in previous versions i had to put this because otherwise the compiler can't find methodFirst
@interface DetailViewController ()
- (void)methodFirst;
- (void)methodSecond;
@end
@implementation DetailViewController
- (void) methodSecond
{
//if i delete the forward declaration now adays i dont get a compiler error that he cant find method first
[self methodFirst];
}
- (void) methodFirst
{
}
@end
Maintenant, il semble que je n'ai pas besoin de faire cela? Avez-mise à jour d'Apple le compilateur de sorte qu'il n'est plus nécessaire de mettre en avant les déclarations?
Je ne trouve pas de référence à un officiel d'Apple à la source de ce changement. Je me demande ce que d'autres personnes ont rencontrés dans leur nouvel environnement.
Qu'entendez-vous par déclarer des méthodes privées? Pouvez-vous poster un exemple? Autant que je sache, Objective-C ne prend pas en charge les méthodes privées.
sry mon mauvais de son plus d'une déclaration anticipée dans mon .m fichier mais il semble qu'il n'est pas nécessaire pour faire sa déclaration?
édité en mainpost 🙂
le code ci-dessus fonctionne, quand je supprime le @interface de la partie, il fonctionne toujours, mais je m'attends alors xcode pour me donner un avertissement du compilateur, car il ne peut pas trouver methodFirst. mais étrangement, il ne le fait pas :s
Voir aussi: cette réponse (stackoverflow.com/a/9984097/774) à une question similaire.
sry mon mauvais de son plus d'une déclaration anticipée dans mon .m fichier mais il semble qu'il n'est pas nécessaire pour faire sa déclaration?
édité en mainpost 🙂
le code ci-dessus fonctionne, quand je supprime le @interface de la partie, il fonctionne toujours, mais je m'attends alors xcode pour me donner un avertissement du compilateur, car il ne peut pas trouver methodFirst. mais étrangement, il ne le fait pas :s
Voir aussi: cette réponse (stackoverflow.com/a/9984097/774) à une question similaire.
OriginalL'auteur test | 2012-02-23
Vous devez vous connecter pour publier un commentaire.
Que le Compilateur LLVM version livrée avec Xcode 4.3, si vous essayez d'appeler une méthode que le compilateur n'a pas déjà vu, il se regarde dans le reste de l'actuel
@implementation
bloc pour voir si cette méthode a été déclaré plus tard. Si oui, alors il utilise cela, et vous ne recevez pas un message d'avertissement. Par conséquent, en tant que de Xcode 4.3, il ya beaucoup moins besoin de pré-déclarer vos méthodes internes. Clairement, vous avez encore besoin de déclarer les méthodes qui sont exposées publiquement à d'autres classes.Ce changement a été noté dans les notes de version de certains de Xcode 4.3 bêta, mais n'a apparemment pas le faire dans le "Quoi de neuf dans Xcode 4.3" la documentation finale.
Contrairement a été suggéré dans d'autres réponses, ce n'est pas seulement un "non Déclarées Sélecteur" avertissement qui a été désactivée par défaut. En fait, si vous utilisez un ARC, méconnu les sélecteurs sont toujours des erreurs matérielles. Essayez d'appeler
[self myNonexistentMethod]
et vous verrez, le compilateur se plaint toujours.Une raison de continuer à déclarer extension de classe ("privé") méthodes: pour le câblage jusqu'IBActions à l'aide de Interface Builder. Comme de Xcode 4.5.2, IB ne reconnaissez IBActions si elles ne sont mises en œuvre, mais non déclarés.
Super réponse! Donc, à votre avis, doit-on déclarer avant les méthodes privées, de ne pas déclarer avant, ou c'est juste de l'arbitraire à ce point et le meilleur pour aller avec n'importe quel modèle de votre équipe se sentira plus à l'aise avec.
Je ne vois aucune raison de déclarer, dans le cas général. En fait, je préfère ne pas le faire, qu'il finit par encombrer la méthode de la liste de sélection dans la barre du saut. Il peut y avoir quelques raisons de le faire (par exemple, la documentation d'un groupe de méthodes connexes), mais généralement, j'évite juste de.
OriginalL'auteur BJ Homer
Il n'y a pas toutes les méthodes privées en Objective-C. Ce que vous pensez est la classe la poursuite, le "sans nom" de la catégorie de l'interface vous pouvez déclarer dans votre
.m
fichier à déclarer les méthodes qui seront dans l'implémentation de la classe, mais qui ne sont pas dans l'interface publique.Il n'y a jamais été un exigence à déclarer les méthodes avant qu'ils ne soient utilisés. Cependant, il est toujours une bonne idée, et le compilateur a un drapeau d'avertissement pour indiquer quand les méthodes qui n'ont pas été vus sont utilisés. La raison en est à faire avec le système d'exploitation de convention d'appel pour les fonctions. Différents types, tels que les structures, les nombres à virgule flottante, des nombres entiers, et des pointeurs, peuvent toutes être traitées de manière différente lorsqu'ils sont les arguments pour ou des valeurs de retour des fonctions. En effet, sur des ordinateurs différents et dans différents systèmes d'exploitation, ils sont traitées de manière différente. Pour savoir comment gérer les arguments et valeurs de retour pour un Objectif-C méthode, le compilateur a besoin de savoir la signature pour cette méthode: le nombre d'arguments de ce que les types qu'il prend, et de quel type il retourne.
Si elle n'a pas vu une déclaration de la méthode, le compilateur devra faire une estimation. Si cette supposition est incorrecte, alors il peut finissent par mettre de mauvaises valeurs dans les arguments, ou de l'interprétation de la valeur de retour de manière incorrecte, ou d'essayer de prendre quelque chose hors de la pile qui n'existe pas.
Il ressemble à la valeur par défaut est désactivé dans 4.3. L'avertissement que vous devez activer est "non Déclarées sélecteur".
Mal. Ce n'est pas seulement un avertissement du compilateur hors tension. Comme de la LLVM version de Xcode 4.3, le compilateur peut rechercher dans tout le fichier en cours pour trouver des déclarations de méthode. Il n'a pas nécessairement besoin d'être déclarée plus tôt dans le fichier plus.
alors, où ai-je dit c'est pas une obligation, vous dire que c'est faux, car il n'est pas nécessaire? Intéressant.
voir ma réponse
OriginalL'auteur