Use of code blocks (block) for OBJECTIVE-C syntax

Source: Internet
Author: User

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
    1. void (^printblock) (NSString *x);
    2. Printblock = ^ (nsstring* str)
    3. {
    4. NSLog (@"print:%@", str);
    5. };
    6. Printblock (@"Hello world!");

The operating result is: Print:hello world!

2. The code is sorted in a string array

[CPP]View Plaincopy
    1. Nsarray *stringarray = [Nsarray arraywithobjects:@"ABC 1", @"abc", @"abc", @"abc", @"abc", n  IL];
    2. Nscomparator Sortblock = ^ (ID string1, id string2)
    3. {
    4. return [string1 compare:string2];
    5. };
    6. Nsarray *sortarray = [Stringarray sortedarrayusingcomparator:sortblock];
    7. 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
    1. static void (^ const blocks) (int) = ^ (int i)
    2. {
    3. if (i > 0) {
    4. NSLog (@"num:%d", I);
    5. Blocks (i-1);
    6. }
    7. };
    8. 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
  1. int global = 1000;
  2. int main (int argc, const char * argv[])
  3. {
  4. @autoreleasepool {
  5. void (^block) (void) = ^ (void)
  6. {
  7. global++;
  8. NSLog (@"global:%d", global);
  9. };
  10. Block ();
  11. NSLog (@"global:%d", global);
  12. }
  13. return 0;
  14. }

Run Print results:

global:1001

global:1001

Local variables can be used, but they cannot be changed.

[CPP]View Plaincopy
    1. int local = 500;
    2. void (^block) (void) = ^ (void)
    3. {
    4. local++;
    5. NSLog (@"local:%d", local);
    6. };
    7. Block ();
    8. 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
    1. __block int local = 500;
    2. void (^block) (void) = ^ (void)
    3. {
    4. local++;
    5. NSLog (@"local:%d", local);
    6. };
    7. Block ();
    8. 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

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.