#pragma mark

Les #pragma sont des directives pré-processeur, qui sont évaluées lors de la compilation du code en Objective-C, et qui contrairement aux directives #ifdef / #endif ne changeront pas le comportement de l’application au runtime.

Les directives #pragma sont simplement évaluées, et donc utilisées, par Xcode. On les utilise pour deux raisons:

  • Organiser le code
  • Rendre les warning silencieux

Organiser le code avec les #pragma mark

Les directives #pragma mark permettent donc d’organiser le code en permettant le regroupement de différentes méthodes par groupe.

Elles sont insérées dans l’implémentation des classes (fichiers .m) entre chaque groupe de méthodes comme suit:

[cc lang=”objc”]
@implementation ListViewController

#pragma mark – Constructor
– (id)init
{
if (self = [super initWithNibName:@”ContactListViewController” bundle:nil])
{
[…]
}

return self;
}

#pragma mark – View management
– (void)viewDidLoad
{
[super viewDidLoad];

}

#pragma mark – UITableViewDataSource methods
– (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
{
[…]
}

– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[…]
}

#pragma mark – UITableViewDelegate methods
– (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[…]
}

– (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[…]
}

#pragma mark – NSFetchedResultsControllerDelegate methods
– (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[…]
}

#pragma mark – Memory
– (void)dealloc
{
[…]
}

@end
[/cc]

A noter qu’ajouter un tiret entre les mots clés #pragma mark et le titre du groupe permet d’avoir un séparateur dans l’inspecteur de méthodes:

pragma

Bonne pratique

Une bonne pratique est de mettre en place *sans modération* lors de l’utilisation de protocoles est de commencer le titre du groupe par le nom exact du protocole.

[cc lang=”objc”]
// Mauvaise pratique

#prama mark – Table view data source methods
– (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section { … }

// Bonne pratique

#pragma mark – UITableViewDataSource methods
– (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section { … }
[/cc]

Cela permet notamment d’accéder rapidement à la déclaration du protocole en appuyant grâce au “cmd + click” sur le titre.


Next up


Leave a Reply

Your email address will not be published. Required fields are marked *