`
dcj3sjt126com
  • 浏览: 1881848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Objective-C语法之代码块(block)的使用

    博客分类:
  • IOS
阅读更多

代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。

脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:

按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(4); // result是 28

1、参数是NSString*的代码块

 

  1. void (^printBlock)(NSString *x);  
  2. printBlock = ^(NSString* str)  
  3. {  
  4.     NSLog(@"print:%@", str);  
  5. };  
  6. printBlock(@"hello world!");  

运行结果是:print:hello world!

 

2、代码用在字符串数组排序

 

  1. NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];  
  2. NSComparator sortBlock = ^(id string1, id string2)  
  3. {  
  4.     return [string1 compare:string2];  
  5. };  
  6. NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];  
  7. NSLog(@"sortArray:%@", sortArray);  

运行结果:sortArray:(

 

    "abc 05",

    "abc 1",

    "abc 12",

    "abc 13",

    "abc 21"

)

3、代码块的递归调用

代码块想要递归调用,代码块变量必须是全局变量或者是静态变量,这样在程序启动的时候代码块变量就初始化了,可以递归调用

 

  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);  

运行打印结果:

 

num:3

num:2

num:1

 4、在代码块中使用局部变量和全局变量

在代码块中可以使用和改变全局变量

 

  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. }  

 

运行打印结果:

global:1001

global:1001

而局部变量可以使用,但是不能改变。

 

  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);  

在代码块中改变局部变量编译不通过。怎么在代码块中改变局部变量呢?在局部变量前面加上关键字:__block

 

 

  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);  

运行结果:local:501

 

 

                    local:501

 

著作权声明:本文由http://blog.csdn.net/totogo2010/原创

分享到:
评论

相关推荐

    Objective-C高级编程 iOS与OS X多线程和内存管理_Objective-C_ios_

    书中还可能涵盖Block(代码块)的使用,这是Objective-C中一种强大的语法特性,常用于多线程和异步编程,因为它可以捕获和封装变量的上下文。另外,可能会讲解到Cocoa Touch和Cocoa框架中的线程安全类和方法,以及...

    Objective-C语法之走进iphone的开发世界那些事儿

    块(Block)是Objective-C中的匿名函数,可以在代码中定义并立即使用,类似于其他语言的lambda表达式。它们对于处理异步操作,如网络请求,非常有用。 Foundation框架是Objective-C的基础,提供了许多基础类,如...

    Objective-C 基础语法学习项目

    ### Objective-C基础语法学习项目详解 #### 一、Objective-C简介 Objective-C是一种面向对象的编程语言,由Smalltalk和C语言发展而来。它在20世纪80年代初被设计出来,并在苹果公司开发iOS和macOS应用程序时得到了...

    Objective-C示例代码1

    10. **Block(闭包)**:Objective-C支持块语法,`FractionDemo`可能包含使用块作为参数或返回值的方法,用于实现异步操作或回调。 这些只是Objective-C编程中的一部分核心概念,实际的`FractionDemo`代码会根据...

    Objective-C语言教程与案例.zip

    还可能讲解了Objective-C的特殊特性,如类别(Category)、协议(Protocol)和块(Block)。 2. **语法结构**:Objective-C的语法有其独特性,比如它的方法定义和调用方式,以及在C语言基础上添加的“@”符号,如@...

    Objective-C 基础教程源码

    1. Block:Objective-C支持块(Block),一种内联函数,可以捕获并存储其所在作用域的变量。常用于异步编程。 2. GCD(Grand Central Dispatch):苹果提供的多线程解决方案,使用Block简化并发编程。 七、...

    Objective-C

    Objective-C是一种面向对象的编程语言,它是在C语言的基础上扩展了Smalltalk的类和消息传递机制,由Stepstone公司于1983年开发,并在苹果的Mac OS X和iOS操作系统上广泛使用。这个压缩包文件包含了一系列关于...

    [Objective-C编程(第6版)]Programming in Objective-C

    - **特点**:Objective-C支持类、消息传递、继承等面向对象编程特性,并与C语言兼容,允许开发者直接在Objective-C代码中使用C代码。 ##### 2. 基础语法 - **变量和数据类型**:Objective-C支持多种内置数据类型,...

    深入浅出讲objective-c

    1. **语法特性**:Objective-C是在C语言的基础上扩展的,保留了C的语法特性,同时引入了消息传递机制,使得它具有面向对象的能力。 2. **类和对象**:Objective-C中的所有数据结构都是基于类的,类是对象的模板,而...

    objective-c学习资料

    Objective-C是在C语言基础上扩展的,它引入了消息传递机制和类的概念,使得C语言具备了面向对象的能力。Objective-C的语法在某些方面与C++相似,但它的动态性更强,允许在运行时修改类和方法。 2. **类与对象**: ...

    From C++ To Object-C(中文版

    - **块(Block)**: 块是Objective-C中的一个功能强大的特性,它允许开发者定义一段可执行代码并将其传递给其他函数或存储起来供以后使用。块类似于C++中的lambda表达式。 - **快速枚举(Fast Enumeration)**: 快速...

    Objective-C基础教程.rar

    Objective-C是在C语言的基础上扩展的,它保留了C的语法结构,并添加了面向对象编程的特性。在学习Objective-C时,你需要了解C语言的基本概念,如变量、数据类型、控制结构等。同时,Objective-C引入了消息传递机制,...

    objective-c 2.0 课后习题答案

    5. ** Blocks 和 GCD**:Objective-C引入了Block(块)的概念,这是一种内联函数或者闭包。GCD(Grand Central Dispatch)利用Block实现了并发编程。习题可能会让你编写Block表达式,并用GCD进行异步操作。 6. **...

    Objective-C.2.0程序设计(中文版) 高清PDF

    在Objective-C 2.0中,引入了一些重要的改进,如Block(代码块)和ARC(自动引用计数)。Block允许在代码中定义可复用的匿名函数,使得处理回调和并发更加方便。ARC则自动化了内存管理,减少了手动内存管理导致的...

    objective-c基础

    - **与C语言兼容:** Objective-C保留了C语言的所有特性,并在此基础上进行了扩展,因此可以轻松地在Objective-C代码中使用C语言编写的库或代码。 #### 二、Objective-C语言的基础语法 **1. 类与对象** 在...

    IOS应用源码——Objective-C基础教程 随书源码.zip

    6. **Block(块)**:Objective-C的块是一种匿名函数,常用于异步操作或作为参数传递。理解Block的定义、使用和作用域规则。 7. **内存管理**:了解ARC(Automatic Reference Counting)自动引用计数,它是...

    Objective-C基础教程及源代码

    7. **块(Block)**:块是Objective-C中的匿名函数,可以捕获并存储执行上下文中的局部变量。它们在多线程编程和异步操作中非常有用。 8. **Foundation框架**:Objective-C的基石,提供了诸如字符串、数组、字典等...

    Objective-C 基础教程 源代码

    这个"Objective-C 基础教程 源代码"是为初学者设计的,旨在帮助他们理解并掌握Objective-C的基本概念、语法和编程技巧。通过学习这些源代码,你可以亲手实践编程,加深对语言特性的理解。 1. **Objective-C简介**:...

    Programming in Objective-C 4th Edition

    此外,还重点阐述了Objective-C特有的特性,如动态消息传递、协议、属性、块(block)等,这些特性是理解和掌握Objective-C的关键。 #### 4. Cocoa框架介绍 Objective-C通常与Apple的Cocoa框架紧密相连。Cocoa框架...

Global site tag (gtag.js) - Google Analytics