Block协议

1. OC在C的基础上新增了一些数据类型

BOOL

Boolean

class

nil

SEL

id

block

2. block是一个数据类型.

int double float char .......

既然是1个数据类型,那么就可以声明这个数据类型的变量,所以我们完全可以声明1个block类型的变量.

不同类型的变量中可以存储不同类型的数据.

那么block类型的变量中可以存储什么样的数据呢?

1). block是1个数据类型 所以我们可以声明1个block类型的变量.

2). block类型的变量中专门存储1段代码,这段断码可以有参数 可以有返回值.

3. blcok变量的声明

1). 虽然block变量中是用来存储1段代码的,但是1个block变量中并不是任意的1段代码都可以存进去的

而是有限定的.

也就是说,在声明block变量的时候,必须要镇定这个block变量存储的代码是否有参数,是否有返回值.

一旦指定以后,这个block变量中就只能存储这样的代码了.

声明了1个block变量,返回值是void 参数是1个int类型的.

这个时候,这个block变量中就只能存储无返回值且有1个int参数的代码段.

2). 声明block变量的语法格式:

返回值类型 (^block变量的名称)(参数列表);

void (^myBlock1)(); 表示声明了1个block类型的变量叫做myBlcok1 这个变量中只能存储没有返回值没有参数的代码段.

int (^myBlock2)();

int (^myBlock3)(int num1,int num2);

3). 最重要的

声明block变量的时候要指定这个block变量可以存储的代码段的返回值和参数描述,

一点指定,这个block变量中就只能存储这样的代码段了,其他格式的代码段无法存储.

4. 初始化block变量

1). 原理: 写1歌复合block要求的代码段,存储到block中就可以了.

2). 代码段的书写格式:

^返回值类型(参数类表) {

NSLog(@"I Love You");

NSLog(@"I Hate You");

}

3). 写一个无参数无返回值的代码段.

^void() {

NSLog(@"I Love You");

NSLog(@"I Hate You");

};

这个时候,我们就可以将这段代码段使用赋值符号存储到 无返回值五参数要求的block变量中.

void (^myBlock1)();

myBlock1 = ^void() {

NSLog(@"I Love You");

NSLog(@"I Hate You");

};

4). 有返回值的代码段.

^int() {

int num1 = 10 + 20;

return num1;

};

我们就可以将这段代码赋值给符合要求的block变量.

int(^myBlock2)() = ^int() {

int num1 = 10 + 20;

return num1;

};

5). 既有参数既有返回值的代码段.

^int(int num1,int num2) {

int num3 = num1 + num2;

return num3;

};

所以 我们可以将这个代码赋值给符合要求的block变量.

int (^myBlock3)(int num1,int num2) = ^int(int num1,int num2) {

int num3 = num1 + num2;

return num3;

}

6). 注意.

赋值给block变量的代码段必须要符合block变量的要求,否则就会报错.

5. 如何执行存储在block变量中的代码段.

语法格式: block变量名();

有参数就传,有返回值就接.

6. 关于block的简写.

1). 如果我们写的代码段没有返回值.那么代码段的void可以省略.

void(^myBlock1)() = ^() {

};

注意,代码段的返回值是void可以省略,声明block变量的返回值无论是什么不可省略.

2). 如果我们写的代码段没有参数,那么代码段的小括弧可以省略.

int(^myBlock2)() = ^int{

int num1 = 10 + 20;

return num1;

}

再次强调: 我们说的是代码段.

所以,当1个代码段没有参数,也没有返回值的时候,就只写

void(^myBlock3)() = ^{

NSLog(@"I Love You");

NSLog(@"I Hate You");

}

3). 声明block变量的时候,如果有指定参数,可以只写参数类型而不写参数的名称;

int (^myBlock3)(int,int) = ^int(int num1,int num2) {

int num3 = num1 + num2;

return num3;

}

注意: 这个地方我们说的是声明block变量的时候 在写代码段的时候 类型和名称都要写.

4). 无论代码段是否有返回值,在写代码的时候,可以不写返回值类型

如果在写代码段的时候,省略了返回值,这个时候系统会自动的确定返回值类型.

如果代码段中没有返回任何数据, 那么它会认为这个代码段是没有返回值的.

如果代码中有返回数据 返回的数据是什么类型 它就会认为这个代码段是什么类型的.

int(^myBlock3)(int num1,int num2) = ^(int num1,int num2) {

int num3 = num1 + num2;

return num3;

};

建议: 仍然按照我们最标准的写法来写block变量和block代码段.因为这样可以提高代码的阅读性.

7. 简化block变量的复杂定义.

1). 问题: 定义block变量的时候,要写好大1串啊! 类型好长.

2). typedef的使用场景: 将1个长类型定义为1个短类型.

3). 使用typedef将长的block类型 定义为1个段类型.

typedef 返回值类型(^新类型)(参数列表);

typedef void(^NewType)(); 代表重新定义了1个类型叫做NewType 是一个block类型 无参数无返回值的block类型

8. 关于block块访问外部变量的问题.

1). 在block代码块的内部可以去定义在外部的变量的值,定义在外部的局部变量和全局变量.

2). 在block代码快的内部可以修改全局变量的值,但是不能修改定义在外部的局部变量的值.

3). 如果你希望我们定义的局部变量可以允许在block代码的内部去修改,那么就为这个局部变量加1个__block的修饰符.

时间: 2024-10-12 17:35:32

Block协议的相关文章

Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议,有一个Java例子)

Samba服务所使用的端口和协议: 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 (TCP) - 文件和打印共享 : smbd (基于SMB(Server Message Block)协议,主要在局域网中使用,文件共享协议) 4)Port 389 (TCP) - 用于 LDAP (Active Directory Mode) 5)Port 445 (TCP) - NetBIOS

SMB(Server Message Block) Protocal Research

catalogue 1. 什么是SMB 2. 基础SMB协议 3. SMB Clients and Servers 1. 什么是SMB 全世界有很多的客户端和服务端软件实现了SMB协议,全部windows工作站,windows 95,windows NT系统都同时支持SMB客户端和服务端 SMB本质上一种服务消息块(Server Message Block),它可以实现 1. 文件共享 2. 打印机共享 3. 串口共享 4. 通信抽象: 例如named pipes命名管道.计算机间的mail s

samba 服务

samba-client-3.6.9-167.el6_5.i686 samba-3.6.9-167.el6_5.i686 samba-common-3.6.9-167.el6_5.i686 samba-winbind-3.6.9-167.el6_5.i686 samba-swat-3.6.9-167.el6_5.i686 samba-winbind-clients-3.6.9-167.el6_5.i686 service smb start server nmb start 1)Port 137

【安全牛学习笔记】SMB扫描

SMB扫描 ╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋┃SMB扫描                                                                     ┃┃nmap -v -p 139,134 192.168.60.1-20                                          ┃┃nmap 192.168.1.132 -p139,445 --script=smb-os-disc

小白日记12:kali渗透测试之服务扫描(二)-SMB扫描

SMB扫描 Server Message Block 协议.与其他标准的TCP/IP协议不同,SMB协议是一种复杂的协议,因为随着Windows计算机的开发,越来越多的功能被加入到协议中去了,很难区分哪些概念和功能应该属于Windows操作系统本身,哪些概念应该属于SMB 协议.因为该协议很复杂,所以是微软历史上出现安全问题最多的协议. 1.Nmap 最简单的方法:扫描其固定开放的端口139,445,但是无法准确判断其为windows系统 [email protected]:~# <strong

2016年4月21日渗透学习总结

smb协议 server message block 协议 是微软历史上出现安全问题最多的协议 实现复杂 系统默认开放 文件共享 空会话未身份认证访问(SMB1.0漏洞) 通过这个漏洞可获得密码策略,用户名,组名,机器名,用户.组SID smb扫描 nmap -v -p 139,445 192.168.1.1/24 nmap 192.168.60.4 -p 139,445 --script=smb-os-discovery.nse (显示详细信息) nmap -v -p139,445 --scr

14.Windows 与 Linux 文件共享

14. Windows 与 Linux 文件共享 实验要求: 1. 使用WinSCP工具实现windows与虚拟机之间文件共享. 2. 使用Samba服务实现windows与虚拟机之间文件共享. 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机. 2. WinSCP工具. 硬件: 1.PC机一台. 背景知识: 1. WinSCP: WinSCP 是一个 Windows 环境下使用 SSH 的开源图形化 SFTP 客户端.同时支持SCP 协议.它的主要功能就是在本地与远程计算机间安全

samba介绍

Samba服务介绍 1. Samba 概述 Samba是一套使用SMB(Server Message Block)协议的应用程序, 通过支持这个协议, Samba允许Linux服务器与Windows系统之间进行通信,使跨平台的互访成为可能.Samba采用C/S模式, 其工作机制是让NetBIOS( Windows 网上邻居的通信协议)和SMB两个协议运行于TCP/IP通信协议之上,并且用NetBEUI协议让Windows在"网上邻居"中能浏览Linux服务器. Samba服务器包括两个

第12章 使用Samba或NFS实现文件共享

章节简述: 本章节为读者讲述文件共享系统的作用,了解Samba与NFS服务程序的开发背景以及用法. 详细逐条讲解Samba服务配置参数,演示安全共享文件的配置策方法,并使用autofs服务程序自动挂载设备, 学会后即可实现Linux系统之间或与Windows系统之间的文件共享,以及在共享文件时如何配置防火墙与SELinux策略规则. 本章目录结构 12.1 了解文件共享服务 12.2 Samba服务 12.2.1 安装服务程序 12.2.2 安全共享文件 12.3 NFS网络文件系统 12.4