《关于我第一次学oc就在看块这件事》

本文介绍了Objective-C中的Block概念,包括其定义语法、块的使用方式以及块与函数指针的相似性。示例代码展示了如何定义和调用无参数、有参数的Block,以及如何将Block作为方法参数。此外,还提到了块访问局部变量的特性,并简要提及了使用typedef定义Block变量类型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认识块

Block(块)是oc对ANSI C所做的扩展,使用块可以更好的简化oc的编程,且oc许多API都依赖于块。

  • 定义块必须以^开头。
  • 定义块的返回值类型可以省略,且通常省略声明块的返回值类型。
  • 定义块无需指定名字
  • 如果块无返回值,块无须带参数,通常建议使用void作为占位符。
    块很像函数
    定义块的语法格式如下
^ [块返回值类型] (形参类型1 形参1, 形参类型2 形参2, ...)
{
	//块执行体
}110

块变量与函数指针非常相似
块更像是一个匿名函数。当程序调用块时,调用块的语法与调用函数完全相同。我的理解是,完全可以把块当成一种简化的函数。
例如:

#import <Foundation/Foundation.h>

int main(int argc, char * argv[]) {
	@autoreleasepool{
		//定义不带参数,无返回值的块
		void (^printStr) (void) = ^(void) {
			NSLog(@"我正在学习O-C的块");
		};
		//
		double (^hypot)(double, double)= ^ (double num1, double num2){
			return sqrt(num1 * num1 + num2 * num2);
		};
		printStr();
		//调用块,并输出返回值
		NSLog(@"%g",hypot(3, 4));
		//也可以先只定义块变量:定义带参数、无返回值的块
		void (^print)(NSString*);
		//再将块赋给指定的块变量
		print = ^(NSString* info) {
			NSLog(@"info参数为:%@", info);
		};
		//调用块
		print(@"学习块的知识");
	}
}

从例子里可以看到输出

我正在学习O-C的块
5
info参数为:学习块的知识

认识认识块中的局部变量

块可以访问程序中局部变量的值,当访问局部变量的值时,不允许修改局部变量的值

直接使用块作为参数

把块作为方法参数时,无需定义块变量,直接把块作为参数传给指定的方法即可。需要特别提到的是,块只能作为方法的最后一个参数。

使用typedef定义块变量类型

使用typedef可以定义块变量类型,一但定义了块变量类型,该块主要有两个用途:

  • 复用块变量类型,使用块变量类型可以重复定义多个块变量。
  • 使用块变量类型定义函数参数,这样即可以定义带块参数的函数。
    使用typedef定义块变量类型的语法格式如下:

typedef 块返回值类型 (^块变量类型)(形参类型1, 形参类型2, ···);

这次主要任务就是认识块,并学习如何定义一个块,重点掌握定义块的语法即可,其他的主要就是简单认识一下,留到之后继续讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值