Accolades en Objective-c

Note: Ma question est basée après avoir vérifié ceci et ses réponses.

Dans certaines méthodes plus volumineuses, il existe des éléments de code que vous ne voulez conserver que pendant un certain temps. Un exemple:

1) J’ai une grande méthode qui définit mon interface utilisateur: UILabel's taille, la couleur, le positionnement, les UIView's gestes d’UIView, etc. UIView's . UIView's ce qui précède, est-il logique de faire quelque chose comme ceci:

 - (void)setUI { //setting other UI elements { // Add the Swipe Gesture to the swipeUpView UISwipeGestureRecognizer *swipeGestureUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(animeViewWithSwipeGesture)]; swipeGestureUp.direction = UISwipeGestureRecognizerDirectionUp; [_swipeUpView addGestureRecognizer:swipeGestureUp]; } // setting other UI elements } 
  • Sur la base de l’exemple ci-dessus, s’agit-il d’un moyen efficace de réduire l’encombrement de la mémoire d’une application?
  • Existe-t-il une relation avec @autoreleasepool{} ?

Sur la base de l’exemple ci-dessus, s’agit-il d’un moyen efficace de réduire l’encombrement de la mémoire d’une application?

Non, ils ne sont même pas liés. Ils ne sont pas non plus liés à @autoreleasepool – cette utilisation des accolades est le moyen simple d’ouvrir un nouveau champ d’application.

C’est simplement la syntaxe C simple. Vous l’utilisez pour ouvrir une nouvelle scope comme d’autres l’ont mentionné. Cela signifie (il s’agit de la fonctionnalité C) que vous pouvez utiliser à nouveau les mêmes noms pour les variables de stack, car elles ont une scope différente. De plus, les variables que vous déclarez à l’intérieur de cette étendue ne seront pas accessibles par l’extérieur.

Il n’y a pas de relation avec l’empreinte mémoire, seulement avec l’organisation du code.

Les accolades servent simplement à définir une nouvelle scope, de sorte que vous puissiez définir de nouvelles variables portant le même nom que d’autres variables de scope externes.

Le bloc @autoreleasepool {} est similaire, mais il déclare également un pool de libération automatique au début et le draine à la fin. cette scope.