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(@"test");
}
int sum(int a, int b)
{
return a + b;
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
//int 4 float double 8 char
//更加合理的分配内存空间
int ca =10;
//对象类型 NSObject * obj
//id
//BOOL
//block 指向函数的指针比较像
//SEL
/*
void (*myPoint)() = test;
myPoint();
*/
//block就是弥补了 指向函数的指针,不能够直接保存一个函数体(代码块)
/*
void (^myBlock)() = ^{
NSLog(@"test");
};
myBlock();
int (^sumBlock)(int a, int b) = ^int (int a, int b) {
return a + b;
};
int result = sumBlock(10,20);
NSLog(@"result = %d",result);
*/
//如果想要改变,block代码块之外的变量值,就必须在变量前加入
//__block关键字
__block int x = 0;
int (^sumBlock)(int a, int b) = ^int (int a, int b) {
int result = (a * b);
x = result;
return result;
};
NSLog(@"x = %d",x);//注意代码运行先后顺序 输出0;
//当在开发中,你发现一个方法中的算法,可以有多种实现,你一时还不能确定用哪种更好,你就可以吧方法中其中一个参数定义成block方式
//
Calculate * cal = [[Calculate alloc] init];
int sum = [cal calculateWithNumber1:10 andNumber2:20 andCalculate:sumBlock];
NSLog(@"sum = %d",sum);
NSLog(@"x = %d",x);//注意代码运行先后顺序 输出200;
}
return 0;
}
//
// Calculate.h
// 02-OC中特有的一些语法
//
// Created by apple on 14-3-18.
// Copyright (c) 2014年 apple. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef int (^calculateBlock)(int a,int b);
@interface Calculate : NSObject
- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate;
@end
//
// Calculate.m
// 02-OC中特有的一些语法
//
// Created by apple on 14-3-18.
// Copyright (c) 2014年 apple. All rights reserved.
//
#import "Calculate.h"
@implementation Calculate
/*
- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2
{
// return number1 + number2;
// return number1 - number2;
// return number1 * number2;
// return number1 / number2;
}
*/
- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate
{
//经常变化的功能,在设计当中叫做封装变化
return calculate(number1,number2);
}
@end
block数据类型的更多相关文章
- 黑马程序员——Block数据类型
Block数据类型,又被称为代码段.因为它可以封装一段代码.苹果官方建议多用block.因为在多线程控制.异步任务,集合遍历.集合排序.动画转场等方面用的很多. Block的特点: 1.Block 用 ...
- Objective-C Block数据类型 @protocol关键字
Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合 ...
- 小白学开发(iOS)OC_ block数据类型(2015-08-08)
// // main.m // block数据类型 // // Created by admin on 15/8/12. // Copyright (c) 2015年 admin. All r ...
- [Objective-c 基础 - 3.3] block数据类型
A.概念 1.block类似函数 (1)可以保存代码 (2)有返回值 (3)有形参 2.block的标志:^ // 没有参数和返回值的block void (^myblock)() = ^{ // ...
- Block解析(iOS)
1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...
- block的解析
1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...
- iOS常用设计模式和机制之Block简单使用
Block :block 实际上就是 Objective-C语言对闭包的实现 闭包(Closure):闭包就是一个函数,或者一个指向函数的指针,加上这个函数执行的非局部变量.闭包允许一个函数访问声明该 ...
- iOS - OC Block 代码块
前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...
- iOS - Block 代码块
1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...
随机推荐
- swfit-pod使用
一.查询第三方版本号 pod search SDWebImage 二.项目添加pod 1.在终端打开项目路径 2.输入 pod init 生成Podfile 三.在Podfile输入需要的第三方 ...
- PHP获取当前日期和时间的方法
PHP获取当前日期和时间的方法 来源:wikiHow 时间:2014-12-04 14:49:45 阅读数:7240 分享到:0 [导读] PHP是用来创建网络中动态内容的常见语言,因此PHP ...
- PHP网络操作函数汇总
PHP网络操作函数汇总 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了PHP网络操作函数汇总,本文列举了如gethostbyaddr.gethostbyname.head ...
- JavaScript数据类型(转)
JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型——Object,Object本质上是由一 ...
- Lazarus开发平台编译后的可执行程序的减肥方法
1.在“工程”菜单下,单击“工程选项”,原始状态的界面为: 2.将界面中的两个选项修改为如下: 3.按“确定”按钮,即可 编译以后的可执行程序就将又原来的14m变为1.66m. 1.选择: Proje ...
- [转]如何编写和应用Java的自定义异常类
编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class CustomException exten ...
- 【转】最简单的CI框架入门示例--数据库取数据
1.下载CI框架(自己找) 2.配置 database.php配置: 为数据库服务器设置 connection 参数: $db['default']['hostname'] = "yo ...
- Freemarker的初次使用之FTL标签嵌套与map的使用
入职第二周了,在熟悉了公司自动化测试脚本的编写(使用什么数据库,使用哪种语言,框架带了哪些方法)后,现在开始熟悉模拟器,我们把请求发到服务器1,服务器1根据请求参数处理后将结果发给模拟器,模拟器根据服 ...
- Bootstrap 进度条媒体对象和条组
列表组组件 列表组组件用于显示一组列表的组件. //基本实例 <ul class="list-group"> <li class="list-group ...
- 制作3D图片立方体旋转特效
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>CS ...