代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。
脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:
按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(4); // result是 28
1、参数是NSString*的代码块
- void (^printBlock)(NSString *x);
- printBlock = ^(NSString* str)
- {
- NSLog(@"print:%@", str);
- };
- printBlock(@"hello world!");
运行结果是:print:hello world!
2、代码用在字符串数组排序
- NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];
- NSComparator sortBlock = ^(id string1, id string2)
- {
- return [string1 compare:string2];
- };
- NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];
- NSLog(@"sortArray:%@", sortArray);
运行结果:sortArray:(
"abc 05",
"abc 1",
"abc 12",
"abc 13",
"abc 21"
)
3、代码块的递归调用
代码块想要递归调用,代码块变量必须是全局变量或者是静态变量,这样在程序启动的时候代码块变量就初始化了,可以递归调用
- static void (^ const blocks)(int) = ^(int i)
- {
- if (i > 0) {
- NSLog(@"num:%d", i);
- blocks(i - 1);
- }
- };
- blocks(3);
运行打印结果:
num:3
num:2
num:1
4、在代码块中使用局部变量和全局变量
在代码块中可以使用和改变全局变量
- 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;
- }
运行打印结果:
global:1001
global:1001
而局部变量可以使用,但是不能改变。
- int local = 500;
- void(^block)(void) = ^(void)
- {
- local++;
- NSLog(@"local:%d", local);
- };
- block();
- NSLog(@"local:%d", local);
在代码块中改变局部变量编译不通过。怎么在代码块中改变局部变量呢?在局部变量前面加上关键字:__block
- __block int local = 500;
- void(^block)(void) = ^(void)
- {
- local++;
- NSLog(@"local:%d", local);
- };
- block();
- NSLog(@"local:%d", local);
运行结果:local:501
local:501
著作权声明:本文由http://blog.csdn.net/totogo2010/原创
相关推荐
书中还可能涵盖Block(代码块)的使用,这是Objective-C中一种强大的语法特性,常用于多线程和异步编程,因为它可以捕获和封装变量的上下文。另外,可能会讲解到Cocoa Touch和Cocoa框架中的线程安全类和方法,以及...
块(Block)是Objective-C中的匿名函数,可以在代码中定义并立即使用,类似于其他语言的lambda表达式。它们对于处理异步操作,如网络请求,非常有用。 Foundation框架是Objective-C的基础,提供了许多基础类,如...
### Objective-C基础语法学习项目详解 #### 一、Objective-C简介 Objective-C是一种面向对象的编程语言,由Smalltalk和C语言发展而来。它在20世纪80年代初被设计出来,并在苹果公司开发iOS和macOS应用程序时得到了...
10. **Block(闭包)**:Objective-C支持块语法,`FractionDemo`可能包含使用块作为参数或返回值的方法,用于实现异步操作或回调。 这些只是Objective-C编程中的一部分核心概念,实际的`FractionDemo`代码会根据...
还可能讲解了Objective-C的特殊特性,如类别(Category)、协议(Protocol)和块(Block)。 2. **语法结构**:Objective-C的语法有其独特性,比如它的方法定义和调用方式,以及在C语言基础上添加的“@”符号,如@...
1. Block:Objective-C支持块(Block),一种内联函数,可以捕获并存储其所在作用域的变量。常用于异步编程。 2. GCD(Grand Central Dispatch):苹果提供的多线程解决方案,使用Block简化并发编程。 七、...
Objective-C是一种面向对象的编程语言,它是在C语言的基础上扩展了Smalltalk的类和消息传递机制,由Stepstone公司于1983年开发,并在苹果的Mac OS X和iOS操作系统上广泛使用。这个压缩包文件包含了一系列关于...
- **特点**:Objective-C支持类、消息传递、继承等面向对象编程特性,并与C语言兼容,允许开发者直接在Objective-C代码中使用C代码。 ##### 2. 基础语法 - **变量和数据类型**:Objective-C支持多种内置数据类型,...
1. **语法特性**:Objective-C是在C语言的基础上扩展的,保留了C的语法特性,同时引入了消息传递机制,使得它具有面向对象的能力。 2. **类和对象**:Objective-C中的所有数据结构都是基于类的,类是对象的模板,而...
Objective-C是在C语言基础上扩展的,它引入了消息传递机制和类的概念,使得C语言具备了面向对象的能力。Objective-C的语法在某些方面与C++相似,但它的动态性更强,允许在运行时修改类和方法。 2. **类与对象**: ...
- **块(Block)**: 块是Objective-C中的一个功能强大的特性,它允许开发者定义一段可执行代码并将其传递给其他函数或存储起来供以后使用。块类似于C++中的lambda表达式。 - **快速枚举(Fast Enumeration)**: 快速...
Objective-C是在C语言的基础上扩展的,它保留了C的语法结构,并添加了面向对象编程的特性。在学习Objective-C时,你需要了解C语言的基本概念,如变量、数据类型、控制结构等。同时,Objective-C引入了消息传递机制,...
5. ** Blocks 和 GCD**:Objective-C引入了Block(块)的概念,这是一种内联函数或者闭包。GCD(Grand Central Dispatch)利用Block实现了并发编程。习题可能会让你编写Block表达式,并用GCD进行异步操作。 6. **...
在Objective-C 2.0中,引入了一些重要的改进,如Block(代码块)和ARC(自动引用计数)。Block允许在代码中定义可复用的匿名函数,使得处理回调和并发更加方便。ARC则自动化了内存管理,减少了手动内存管理导致的...
- **与C语言兼容:** Objective-C保留了C语言的所有特性,并在此基础上进行了扩展,因此可以轻松地在Objective-C代码中使用C语言编写的库或代码。 #### 二、Objective-C语言的基础语法 **1. 类与对象** 在...
6. **Block(块)**:Objective-C的块是一种匿名函数,常用于异步操作或作为参数传递。理解Block的定义、使用和作用域规则。 7. **内存管理**:了解ARC(Automatic Reference Counting)自动引用计数,它是...
7. **块(Block)**:块是Objective-C中的匿名函数,可以捕获并存储执行上下文中的局部变量。它们在多线程编程和异步操作中非常有用。 8. **Foundation框架**:Objective-C的基石,提供了诸如字符串、数组、字典等...
这个"Objective-C 基础教程 源代码"是为初学者设计的,旨在帮助他们理解并掌握Objective-C的基本概念、语法和编程技巧。通过学习这些源代码,你可以亲手实践编程,加深对语言特性的理解。 1. **Objective-C简介**:...
此外,还重点阐述了Objective-C特有的特性,如动态消息传递、协议、属性、块(block)等,这些特性是理解和掌握Objective-C的关键。 #### 4. Cocoa框架介绍 Objective-C通常与Apple的Cocoa框架紧密相连。Cocoa框架...