Vidéo: JOUÉ A MINECRAFT PE AVEC LA MANETTE PS4 SANS LAG ! 2025
Les blocs Objective-C sont comme les fonctions C traditionnelles en ce que les blocs sont de petites unités de code votre application iOS Ils peuvent être transmis en tant qu'arguments de méthodes et de fonctions, puis utilisés lorsqu'ils sont nécessaires pour effectuer un travail. (Comme beaucoup de sujets de programmation, la compréhension des objets de bloc est plus facile quand vous les utilisez.)
Avec iOS 4 et versions plus récentes, un certain nombre de méthodes et fonctions des frameworks système commencent à prendre des blocs comme paramètres.
-
Gestionnaires de notification
-
Gestionnaires d'erreur
-
Énumération
-
Tri
-
Ici, vous pouvez utiliser une méthode en bloc pour animer une voiture, mais bloquer Les objets ont également un certain nombre d'autres utilisations, en particulier dans Grand Central Dispatch et la classe NSOperationQueue, les deux technologies recommandées pour le traitement simultané. N'hésitez pas à vérifier le traitement simultané.
Il est parfois plus facile de suivre ce qui se passe en déclarant une variable de bloc et en la passant comme argument à la méthode. La syntaxe de déclaration, cependant, est similaire à la syntaxe standard pour les pointeurs de fonction, sauf que vous utilisez un caret (^) au lieu d'un astérisque (*).
+ (void) animateWithDuration: (NSTimeInterval): (void (^) (void)) achèvement des animations: (void (^) (BOOL terminé)) achèvement;
Apple traite maintenant les blocs comme un modèle de conception principal, là-haut avec héritage et délégation - alors ne soyez pas surpris de trouver des blocs de plus en plus utilisés.
Néanmoins, parce que c'est un peu avancé, le code est étudié en profondeur afin que vous soyez à l'aise avec les blocs, malgré la syntaxe vraiment bizarre.
Pour commencer, voici la syntaxe qui définit les animations comme un bloc sans paramètre et sans valeur de retour:
void (^) (void)) animations
completion est défini comme un bloc sans retour value et prend un seul paramètre d'argument booléen:
(void (^) (BOOL terminé)) completion
Lorsque vous créez un bloc inline, vous utilisez simplement l'opérateur caret (^) pour indiquer le début d'un bloc et puis suivez le code inclus dans les accolades normales.C'est ce qui se passait avec les animations
: ^ {self. voiture. center = center;}
et
completion: ^ (BOOL terminé) {[self rotate];}
Bien que dans cet exemple vous utilisiez des blocs inline, vous pouvez également les déclarer comme n'importe quelle autre variable locale. Ajoutez le code en gras à votre méthode testDrive en remplaçant ce que vous avez déjà à cet endroit.
- (IBAction) testDrive: (id) expéditeur {CGPoint centre = CGPointMake (voiture centre x, auto-vue, image origine, y + voiture, taille, hauteur / 2);
void (^ animation) () = ^ () { auto. voiture. centre = centre; }; void (^ achèvement) (BOOL) = ^ (BOOL terminé) { [rotation auto]; }; [UIView animateWithDuration: 3 animations: animation achèvement: achèvement]; } Lorsque vous déclarez un bloc, vous utilisez l'opérateur caret (^) pour indiquer le début d'un bloc avec le code entouré des accolades normales et un point-virgule pour indiquer la fin d'une expression de bloc.
La déclaration dans la liste 10-2 est à peu près la même que celle que vous voyez dans animateWithDuration: animations: completion: déclaration de méthode, sauf que les identifiants ont été déplacés un peu. Les deux sont en gras pour rendre cela un peu plus facile à voir:
+ (void) animateWithDuration: (NSTimeInterval) animations de durée: (
void (^) (void)) achèvement des animations: ( void (^) (BOOL terminé) ) achèvement; Ici, vous déclarez deux variables de bloc en utilisant l'opérateur ^: une avec le nom des animations qui n'a pas de valeur de retour, et une avec le nom d'achèvement qui n'a pas de valeur de retour et prend BOOL comme argument unique:
void (^ animation) () void (^ completion) (BOOL)
C'est comme toute autre déclaration de variable (int i = 1, par exemple), dans laquelle vous suivez le signe égal avec sa définition.
Vous utilisez à nouveau l'opérateur ^ pour indiquer le début du
bloc literal - la définition affectée à la variable de bloc. Le bloc littéral inclut les noms d'argument (finis) ainsi que le corps (code) du bloc et se termine par un point-virgule: void
(^ animation) () = ^ () {soi. voiture. centre = centre;}; void (^ achèvement) (BOOL) = ^ (BOOL terminé) {[auto rotation];}; Une fois que vous aurez compris les blocs, vous trouverez toutes sortes d'occasions de les utiliser pour simplifier votre code.