12-Objective-C特有语法:(高效率)block数据类型

一、         基本简介


  • block用来保存一段代码 

    block的标志:^

  • block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。

  • 苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多

  • block跟函数很像:
    1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样
    (和函数又有区别,函数是在编译之前就已经定义好了,是写死了的东西,而block在运行时可以凭空的产生一段运行代码)


二、        Block的特性


  • block特性


1> 如何定义block变量


 int (^mySumBlock)(int, int);

2> 如何利用block封装代码


 ^(int a, int b) {
return a + b;
};

^() {
NSLog(@"----------");
};

^ {
NSLog(@"----------");
};

3> block访问外面变量

以代码示例为例:


void test3()
{
int a = 10;


// 给局部变量加上__block关键字,这个局部变量就可以在block内部修改

    __block int b = 20;

void (^block)();

block = ^{
// block内部可以访问外面的变量
NSLog(@"a = %d", a);

// 默认情况下,block内部不能修改外面的局部变量
// a = 20;

// 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
b = 25;
};
block();
}

4> 利用typedef定义block类型

  可先用typedef先声明类型,再定义变量进行赋值


 typedef int (^MyBlock)(int, int);  // 以后就可以利用MyBlock这种类型来定义block变量

MyBlock block;

MyBlock b1, b2;

b1 = ^(int a, int b) {
return a - b;
};

MyBlock b2 = ^(int a, int b) {
return a - b;
};

  • 与函数对比:


  es: 定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现

  在声明的同时定义变量,然后赋值


int (^MySumBlock)(int, int) = ^(int a, int b) {
return a+b;
};

//    ps:   如果block没有形参,可以省略后面的()

     pk(对比一下)指向函数的指针:


int sum(int a , int b)
{
return a + b;
}

int main()
{
// 指针函数的指针
int (*p)(int, int) = sum;
int d = p(10, 12);
NSLog(@"%d", d);
}
 

12-Objective-C特有语法:(高效率)block数据类型,布布扣,bubuko.com

时间: 2024-11-05 20:59:12

12-Objective-C特有语法:(高效率)block数据类型的相关文章

小白学开发(iOS)OC_ block数据类型(2015-08-08)

// //  main.m //  block数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Calculate.h" //  定义一个函数 void test() { NSLog(@"test函数"); } int main(

11-Objective-C特有语法:内存管理总结

一.    基本原理 1.        什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量等 管理范围:任何继承了NSObject的对象,对其他基本数据类型(int.char.float.double.struct.enum等)无效 2.        对象的基本结构 每个OC对象都有自己的引用计数器,是一个整数,表示"对象被引用的次数",

Java 语法 索引 ----- 变量-----数据类型

数据类型 类型 bits/byte 范围 默认值 byte 8/1 -128 +127 0 short 16/2 -32,768+32,767 0 int 32/4 -2,147,483,648 = -231+2,147,483,647 = 231-1 0 long 64/8 -9,223,372,036,854,775,808 = -263+9,223,372,036,854,775,807 = 263-1 0L float 32/4 1.40129846432481707e-45  = 2-

【黑马程序员】————OC特有语法

一.点语法 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; 二.成员变量的作用域 @public : 在任何地方都能直接访问对象的成员变量 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private) @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected) @package : 只要处在

Objective-C Block数据类型 @protocol关键字

Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合遍历 集合排序 动画转场用的很多 定义Block变量 void (^myBlock) (); int (^sunBlock) (int, int); 利用Block封装代码 ^ { NSLog(@"=========="); }; ^() { NSLog(@"=========&

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

study Mvc step by step (二) 关于MVC的一些C#特有语法

在我们即将进入ASP.NET开发大门的时候.我们需要先学习一些C#的特有语法.而且对于传统的webform的开发,我们介绍的这些C#特有语法并不是每个人都熟悉的.本节将介绍一个MVC优良程序员所需要的C#语言特性. 一:c#的基本特性 1.1使用自动实现的属性 c#属性特性让你暴露一个类的数据片段,这些数据以及如何设置和接收数据采取了一种松耦合的方式.就是说并不是直接和我们类中的字段相关联,而是通过一个对外的接口.我们首先看一下下面的这个叫做   "product"  类  类里面我们

10-Objective-C特有语法:Category、类对象、description、SEL、NSLog输出增强

一.    分类-Category 1.        基本用途 OC中如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 1>.继承 2>.分类(Category) 2.        格式 分类的声明 @interface 类名 (分类名称) // 方法声明 @end 分类的实现 @implementation 类名 (分类名称) // 方法实现 @end 3.        好处 一个庞大的类可以分模块开发,可以由多个人来编写,更有利于团队合作 给系统自带的类添加分类,例如:

block数据类型

// //  main.m //  04-block数据类型 // //  Created by apple on 14-3-18. //  Copyright (c) 2014年 apple. All rights reserved. // #import <Foundation/Foundation.h> #import "Calculate.h" //数据类型 //1.作为参数传递 //2.作为函数的返回值 //3.声明成变量 void test() { NSLog(