Fichiers de class de Obj-C "@interface"?

Dupliquer possible:
Différence entre la définition @interface dans les files .h et .m

Les files de class Obj C ont deux files .h et .m, dans lesquels .h contient la définition d'interface (@interface) et .m contient son implémentation (@implementation)

Mais j'ai vu dans certaines classs une @interface apparaissant à la fois dans .h et .m?

Quel est le besoin de l'interface @ dans les deux files? Y at-il une raison spécifique de le faire? Et quels sont les avantages si cela a été fait?

La macro @interface du file .m est généralement utilisée pour les iVars privés et les propriétés pour une visibilité limitée. Bien sûr, c'est complètement optionnel mais c'est sans aucun doute une bonne pratique.

L' @interface dans le file .h est généralement l'interface publique, c'est celui que vous déclareriez l'inheritance dans tel que

  @interface theMainInterface : NSObject 

Notez les deux-points : puis l'object super que cette @interface hérite de NSObject , je crois que cela ne peut être fait que dans le file. Vous pouvez également déclarer l' @interface avec une catégorie telle que

  @interface theMainInterface(MyNewCatergory) 

Cela signifie que vous pouvez avoir plusieurs @interface s dans un file .h comme

  @interface theMainInterface : NSObject // What ever you want to declare can go in here. @end @interface theMainInterface(MyNewCategory) // Lets declare some more in here. @end 

La déclaration de ces types de @interface s dans le file .h rend généralement tout ce qui y est déclaré public.

Mais vous pouvez déclarer private @interface s dans le file .m qui fera l'une des trois choses suivantes: il étendra en privé l' @interface sélectionnée ou appenda une nouvelle catégorie à une @interface sélectionnée ou déclarera une nouvelle @interface privée

Vous pouvez le faire en ajoutant quelque chose comme ça au file .m.

  @interface theMainInterface() // This is used to extend theMainInterface that we set in the .h file. // This will use the same @implemenation @end @implemenation theMainInterface() // The main implementation. @end @interface theMainInterface(SomeOtherNewCategory) // This adds a new category to theMainInterface we will need another @implementation for this. @end @implementation theMainInterface(SomeOtherNewCategory) // This is a private category added the .m file @end @interface theSecondInterface() // This is a whole new @interface that we have created, this is private @end @implementation theSecondInterface() // The private implementation to theSecondInterface @end 

Tout cela fonctionne de la même manière, la seule différence est que certains sont private , certains sont public et certains ont des categories

Je ne sais pas si vous pouvez hériter sur un @interface dans le file .m.

J'espère que cela t'aides.

L'interface @ qui apparaît dans le file .m est généralement utilisée pour la définition de catégorie interne. Il y aura un nom de catégorie suivi de l'instruction @interface dans le format suivant

 @interface ClassName (CategoryName) @end 

Lorsque le nom de la catégorie est vide en tant que format suivant, les propriétés et les methods à l'intérieur sont considérées comme privées.

 @interface ClassName () @end 

Notez également que vous pouvez avoir une propriété déclarée comme readwrite dans la catégorie privée et readonly dans l'en-tête. Le compilateur se plaindra si les deux déclarations sont readwrite.

 // .h file @interface ClassName @property (nonatomic, strong, readonly) id aProperty; @end // .m file @interface ClassName() @property (nonatomic, strong) id aProperty; @end 

si nous voulons déclarer une méthode privée, nous utilisons la déclaration @interface dans le file .m.