iOS Block的简单使用以及__block 和static修饰变量
简单的代码总结,不足之处多多指教。
//简单的使用
-(void)blockOne{
    int number=;
    int(^BlockOne)(int) = ^(int num2)
    {
        return number*num2;
    };
    NSLog(@"输出的block %d",BlockOne());
}
-(void)blockTwo{
   int(^block)(int,int) = ^(int stra,int str2)
    {
        return stra + str2;
    };
    NSLog(@"这是第二个啊 %d",block(,));
}
-(void)blockThree{
    //下边这个代表Block 会汇创输入的 平方根(int a 就是参数咧,return a*a ; 就是行为主体)。记得主题后边要加“;” 因为是叙述,而整个{} 后边也要加“;”  因为Block 是个物件实体
    //小括号里边的3 会被当成 输入值然后由block输出3*3=9 致电该给reblock 这个变数
    int reblock = ^(int a){ return  a*a;}();
    NSLog(@"reblock %d",reblock);
    //上边的简单方法  回传值 (^名字)(参数列);
    int (^square)(int);
    //有一个 square 的Block Pointer  其所指向的Block 是有一个int 输入 和输出
    square = ^(int a){return a*a;};//将刚才的实体 制定给square
    //使用
    NSLog(@"输出square 的 平方%d",square());
}
Block中变量的值在函数内外的变化
-(void)blockPointer{
#define mark  变量的变化 是否可以改变其值
//  1 未加修饰   Block  外改变outA后  不改变最后结果
   int outA = ;
    int(^myPtr)(int) = ^(int a)
    {
        return  outA + a;
    };
    outA = ;
    //去与 block 在同一个作用域中值
    int result = myPtr();
    NSLog(@"block 外改变 outA的值为10后 会是13嘛 %d",result); ///这个值在进行到  block中时  第一次 会copy 到block中去,下次再用直接用copy值,其值之后辩护啊 对其都不会有影响   指的是变数的值; 如果是一个pointer指针的话,它的值是可以在block 里变化的
//  2 __block 修饰后  其外改变,可以改变   在其内改变 ,可以改变
    //外部改变
    __block int outB = ;
    int(^myPtrB)(int) = ^(int b)
    {
        return  outB + b;
    };
    outB = ;
    //去与 block 在同一个作用域中值
    int resultB = myPtrB();
    NSLog(@"block 外改变 outB的值为10后 会是13嘛 %d",resultB);
    //block  内部改变
     __block int outC = ;
     int(^myPtrC)(int) = ^(int c)
     {
     outC = ;
     return  outC + c;
     };
         NSLog(@"block 内部 变 outC的值为10后 会是13嘛 %d",myPtrC());
   }
#define mark   static 修饰变量的时候值的变化
// 用staic 修饰是的改变   因为outC是个static 变数会直接反应其值
-(void)blockStaticChange{
   //  2 __block 修饰后  其外改变,可以改变   在其内改变 ,可以改变
    //外部改变
   static  int outB = ;
    int(^myPtrB)(int) = ^(int b)
    {
        return  outB + b;
    };
    outB = ;
    //去与 block 在同一个作用域中值
    int resultB = myPtrB();
    NSLog(@"static 外改变 outB的值为10后 会是13嘛 %d",resultB);
    //block  内部改变
    static int outC = ;
    int(^myPtrC)(int) = ^(int c)
    {
        outC = ;
        return  outC + c;
    };
    NSLog(@"static 内部 变 outC的值为10后 会是13嘛 %d",myPtrC());
}
iOS Block的简单使用以及__block 和static修饰变量的更多相关文章
- iOS - Block的简单使用
		
Block 的使用有两种: .独立Block .内联Block <一>独立Block 使用方式 一.定义一个Block Object,并调用. 1.定义 // 定义一个Bl ...
 - 关于Block的简单使用
		
Block在整个iOS开发中无所不见,很重要,很重要,文本在这里block的简单使用介绍.我们可以简单地定义.使用block. 1. Block和C的指针函数很像,但比C的函数灵活多了.废话了.... ...
 - iOS block从零开始
		
iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void ...
 - iOS  block 闭包的学习
		
iOS 闭包 学习 理解: 1 . 闭包外界无法访问内部变量 ,它是一个独立的代码块. 2 . 闭包可以作为 一个方法 ,甚至局部变量 全局 变量 3 . 闭包 是一种引用类型 注 ...
 - iOS block
		
主要内容: block基本声明格式 block访问区域变量 block代替代理 block基本声明格式: ^(传入的参数){具体代码}; 注: Block实体开头是"^",接着是由 ...
 - iOS Block理解
		
以前看到Block觉得也没什么,不就是类似函数的东西,这东西在C#里就是委托,在Java里就是块,有什么稀奇的.但看到一点进阶的内容后,发现这个东西确实有用. 所以做下总结. 一.块的基本用法 块的语 ...
 - iOS Block简介
		
Block是对象,它封装了一段代码,这段代码可以在任何时候执行.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:block是inli ...
 - iOS Block 内存管理的探讨
		
在很多情况下Block是造成程序循环引用内存泄漏的元凶.下面我们就讲解一下block对内存管理的影响.在讲解之前.希望大家对block有一定的了解.如果大家还不是太清楚block的实现原理.希望大家可 ...
 - iOS - Block		代码块
		
1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...
 
随机推荐
- alex python of day2
			
模块 sys模块:sys模块是用c语言写的,所以在lib下是不会有sys.py这个文件存在 1 import sys 2 print(sys.path) #打印环境变量 3 print(sys.a ...
 - android 加载图片圆角等功能的处理
			
以Glide为例: Glide.with(getContext()).load(item.getSoftLogo()).transform(this.glideRoundTransform).into ...
 - Ceph编译安装教程
			
Ceph官方版本目前支持的纠删码很有限,实验室这块希望能够整合我们自主开发的纠删码BRS(Binary Reed–Solomon encoding),所以需要编译Ceph环境.Ceph官方目前推荐的安 ...
 - 2943:小白鼠排队-poj
			
2943:小白鼠排队 总时间限制: 1000ms 内存限制: 65536kB 描述 N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子.现在称出每只白鼠的重量,要求按 ...
 - 开始你的第一个npm脚本工具
			
在实际开发中,一般刚开始一个项目或者刚接手一个项目,我们会运行 npm install 下载安装所有依赖, 在实际开发中,可能也会使用各种命令行-- 来提高我们开发的效率. 与它相处了这么久,你真的了 ...
 - TCP/IP协议栈 -----链路层
			
这节说一下链路层和ARP RARP协议 链路层: 在协议栈中链路层的目的有三个:1. 为IP模块发送或接受数据包 2.为ARP模块发送或接受ARP请求 3. 为RARP模块发送或接受RARP请求. 让 ...
 - 数据库 SQL Server2012安装步骤详解
			
这篇文章主要给大家讲解一下数据库SQL Server2012的安装步骤(若有雷同纯属巧合,还望谅解!) 在正式安装之前,我们需要进行两个设置: ① 首先需要关闭Windows防火墙,若不关闭,后续的安 ...
 - AngularJS ng-repeat使用及注意事项
			
用法:ng-repeat="extension"; extension(表达式) 定义了如何循环集合. 表达式实例规则: 1. x in records 2. (key,value ...
 - 完成你的第一个superMap示例
			
1.从官网下载superMap安装包,我选择setup包 2.解压压缩文件后,按照readme指导书,运行setup.exe进行安装 解压后压缩包包含文件: 执行setup.exe进行安装,其中Sup ...
 - 如果Centos没有桌面,怎么修改IP地址
			
修改前备份!!! 修改前备份!!! 修改前备份!!! [PHP] 纯文本查看 复制代码 ? 1 vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑,输入以下 ...