文档章节

代码块

 蒲公英6_6守候
发布于 2015/11/08 13:59
字数 507
阅读 3
收藏 0

代码块的学习

个人认为代码块的好处就是简单明了,看起来更加清晰!

它的写法是
返回整形值( ^ 名字 )参数类型 = ^ (返回类型和名称){
代码块的整体}

//无返回类型
   void (^hello_world)(void)= ^(void)   {
       NSLog(@"hello world!");
   };
   hello_world();
void (^block)(int) = ^(int number1){
       NSLog(@"%i",number1);
   };
   block(1);
//有返回类型
   int (^square)(int) = ^(int number) {
       return number*number;
   };
   int num = square(5);
   NSLog(@"%i",num);
//构造块的关键字typedef ,优点是使代码看起来更加简洁。
   typedef void (My_BLOCK)(void);
   My_BLOCK block1 =
(void){
       NSLog(@"hello world");
   };
   block1();
typedef void (^SUM)(int);
   SUM sum1 = ^(int number){
       NSLog(@"%i",number);
   };
   sum1(3);
// 传多个参数的代码块
   int (^add_Sum)(int,int)= ^(int num1,int num2){
       return num1+num2;
   };
    int a = add_Sum(12,2);
NSLog(@"%i",a);
int addSum = 0;
   for (int i = 1; i<=10; i++) {
       addSum = add_Sum(addSum,i);
   };
   NSLog(@"%i",addSum);
//根据ASCALL码值来进行排序
   NSArray *array = ["q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m"];
   NSArray *arr = [array sortedArrayUsingComparator:^NSComparisonResult(id
                                                                        obj1, id  _Nonnull obj2) {
       return [obj1 compare:obj2];
   }];
   NSLog(
"%@",arr);
//局部变量
   double a = 10 , b = 20;
   double (^result_w)(void) = ^(void){
       return  a * b;
   };
   NSLog("%.0f",result_w());
   a = 20;
   b = 50;
   NSLog(
"%.0f",result_w());
   // static静态    全局变量
   static  double a1 = 1 , b1 = 2;
   double (^result_ww)(void) = ^(void){
       return  a1 * b1;
   };
   NSLog("%.0f",result_ww());
   a1 = 27;
   b1 = 92;
   NSLog(
"%.0f",result_ww());
static void (^const blocks)(int) = ^(int i)
{
       if (i > 0) {
           NSLog(@"i:%d",i);
           blocks(i-1);
   }
   };
   blocks(10);
static int global = 2;
   void(^blockI)(void) = ^(void) {
       global++;
       NSLog("global:%d",global);
   };
   blockI();
   NSLog(
"%d",global);
//本地变量会被代码块作为常量获取,如果需要修改他们的值,必须将他们声明为可修改的(__block)
   __block double c = 3;
   double (^he)(double,double) = ^(double a,double b){
       c = a * b;
       return c;
   };
   NSLog(@"%.0f",he(3,4));

static定义 ,一旦在前面写了static在往后的代码块中,就不能进行更改!出去了作用域,就会变味原值
 在代码快中 改变局部变量编译是通不过的,需要在前面加 __block 关键字,否则会报这样的一个错误 
递归使用
 1: 用sataic 关键字 使其在真个类初始化之前初始化好 
 2: 使用 __block 关键字 


© 著作权归作者所有

粉丝 0
博文 15
码字总数 7681
作品 0
西安
私信 提问
在iOS4中使用代码块-基础知识

iOS4引入了一个新特性,支持代码块的使用,这将从根本上改变你的编程方式。代码块是对C语言的一个扩展,因此在Objective-C中完全支持。如果你学过Ruby,Python或Lisp编程语言,那么你肯定知道...

junwong
2012/03/01
484
0
Java类在new的过程中,静态域、静态块、非静态域、非静态块、构造函数的执行顺序问题

在Java类被new的过程中,执行顺序如下: 实现自身的静态属性和静态代码块。(根据代码出现的顺序决定谁先执行) 实现自身的非静态属性和非静态代码块。 执行自身的构造函数。 在实现继承的类...

hello菜bird
2016/10/10
72
0
Java的4种代码块

一、普通代码块   直接在一个方法中出现的{}就称为普通代码块,例子程序如下:   public class CodeDemo01{   public static void main(String[] args){   //普通代码块   {   i...

城固如春
2016/10/26
5
0
Java中静态域、静态块、非静态域、非静态块、构造函数的执行顺序

在Java类被new的过程中,执行顺序如下: 实现自身的静态属性和静态代码块。(根据代码出现的顺序决定谁先执行) 实现自身的非静态属性和非静态代码块。 执行自身的构造函数。 在实现继承的类...

小鱼儿321
2018/05/30
17
1
static{}(静态代码块)与{}(非静态代码块)的异同点

相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋值。 不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码...

fjabing
2014/02/19
82
1

没有更多内容

加载失败,请刷新页面

加载更多

Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
52分钟前
5
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
6
0
LNMP环境介绍,Mariadb安装,服务管理,mariadb安装3

LNMP环境介绍 Nginx 处理的请求有两种,分为 静态与动态 图片,js,css,视频,音频,flash 等都是静态请求,这些数据都不是保存在数据库里面的 动态请求一般来说,需要的数据是在数据库里面...

doomcat
今天
2
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
7
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部