/ / Ako sa používa kľúčové slovo "__block" v Objective-c? - objektív-c, objektív-c-bloky

Ako sa používa kľúčové slovo "__block" v Objective-c? - objektív-c, objektív-c-bloky

Len si všimol __block kľúčové slovo v niektorom z objektových kódov typu c:

// myString passed into the method
__block NSString *_myString = myString;

Ako to funguje? __block kľúčové slovo zmeniť správanie vyššie uvedeného kódu?

odpovede:

6 pre odpoveď č. 1

Tento variabilný modifikátor dáva možnosť meniť premennú v rozsahu bloku.


0 pre odpoveď č. 2

S výhradou výrazu nad modifikátorom __block sa nič nepodarí.V kontexte bloku však __block umožňuje blokom definovaným v tejto metóde mutovať premennú.

__block NSString *myString = @"My string";
NSLog(@"myString: %@", myString);


dispatch_async(dispatch_get_main_queue(), ^{
myString = @"My string changed.";
});

dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"myString: %@", myString);
});

V tomto príklade môžu bloky zmeniť myStringukazovať na novú premennú. Je to analógové pre prenesenie premennej odkazom.Ak odstránim __block modifikátor z deklarácie myString by som si kompiláciu uvádzať, "Variable nie je priraditeľné (chýba __block typ špecifikátor).


0 pre odpoveď č. 3

Umožňuje niekoľko vecí:

  1. Umožňuje priradiť premennú vnútri bloku, ktorý ju zachytí.
  2. Umožňuje bloku vidieť zmeny hodnoty premennej po vytvorení bloku.
  3. Podľa MRC, a __block premenná typu ukazovateľa objektu nie je blokom zachovaná pri kopírovaní bloku.