Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
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
- 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
- nsarray *stringarray = [nsarray Arraywithobjects:@ "abc 1", @
- nscomparator sortblock = ^ (id STRING1, ID STRING2)
- {  
- < span class= "keyword" >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
- 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
- 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.
- 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
- __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