Code blocks are essentially similar to other variables. The difference is that the code block stores the data as a function body. With code blocks, you can pass in the number of arguments as you would call other standard functions, and get the return value.
The caret (^) is the syntax tag for the block. The return value defined by our familiar parameter syntax specification and the body of the block (that is, code that can be executed). The syntax for assigning a block variable to a variable is explained:
Call the Block object variable as you call the function:
int result = Myblock (4); Result is 28.
1, the parameter is nsstring* code block
[CPP]View Plaincopy
- void (^printblock) (NSString *x);
- Printblock = ^ (nsstring* str)
- {
- NSLog (@"print:%@", str);
- };
- Printblock (@"Hello world!");
The operating result is: Print:hello world!
2. The code is sorted in a string array
[CPP]View Plaincopy
- Nsarray *stringarray = [Nsarray arraywithobjects:@"ABC 1", @"abc", @"abc", @"abc", @"abc", n IL];
- Nscomparator Sortblock = ^ (ID string1, id string2)
- {
- return [string1 compare:string2];
- };
- Nsarray *sortarray = [Stringarray sortedarrayusingcomparator:sortblock];
- NSLog (@"sortarray:%@", Sortarray);
Operation Result: Sortarray: (
"ABC 05",
"ABC 1",
"ABC 12",
"ABC 13",
"ABC 21"
)
3. Recursive invocation of code blocks
Code blocks want to be called recursively, the block variable must be a global variable or a static variable, so that the code block variable is initialized when the program starts, and can be called recursively
[CPP]View Plaincopy
- static void (^ const blocks) (int) = ^ (int i)
- {
- if (i > 0) {
- NSLog (@"num:%d", I);
- Blocks (i-1);
- }
- };
- Blocks (3);
Run Print results:
Num:3
Num:2
Num:1
4. Use local variables and global variables in code blocks
Global variables can be used and changed in code blocks
[CPP]View Plaincopy
- int global = 1000;
- int main (int argc, const char * argv[])
- {
- @autoreleasepool {
- void (^block) (void) = ^ (void)
- {
- global++;
- NSLog (@"global:%d", global);
- };
- Block ();
- NSLog (@"global:%d", global);
- }
- return 0;
- }
Run Print results:
global:1001
global:1001
Local variables can be used, but they cannot be changed.
[CPP]View Plaincopy
- int local = 500;
- void (^block) (void) = ^ (void)
- {
- local++;
- NSLog (@"local:%d", local);
- };
- Block ();
- NSLog (@"local:%d", local);
Changing the local variable compilation in the code block does not pass. How do you change local variables in a block of code? Precede a local variable with a keyword: __block
[CPP]View Plaincopy
- __block int local = 500;
- void (^block) (void) = ^ (void)
- {
- local++;
- NSLog (@"local:%d", local);
- };
- Block ();
- NSLog (@"local:%d", local);
Running Result: local:501
local:501
Copyright statement: This article by http://blog.csdn.net/totogo2010/Original, welcome reprint share. Please respect the author Labor, reproduced when the statement and the author of the blog link, thank you!
Use of code blocks (block) for OBJECTIVE-C syntax