小白学开发(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(int argc,
const char * argv[]) {
@autoreleasepool {
/*
数据类型的作用:
是为了更加合理的分配内存空间
数据类型的功能特点:
1. 作为參数传递
2. 作为函数返回值】
3. 声明变量
OC中的数据类型:
1. 对象类型(NSObject * obj)
2. id
3. BOOL
4. block
5. SEL
6. 基本数据类型
*/
// 注意:block数据类型
和 指向函数的指针类似
// 指向函数的指针例如以下:
int (*myPoint)() =
test;
myPoint(); //
这里就能够通过指针来调用test函数
// 注意:然而指向函数的指针不能直接指向函数即一个代码块,必须通过函数名来指向
// block就是弥补了这一点,可以直接保存一个函数体(代码块)
void (^myBlock)() = ^{
NSLog(@"jajajaj");
};
// 这里myBlock就代表后面括号里的代码块
myBlock();
// 也能够传入參数,有返回值
/*
int (^sumBlock)(int a, int b) = ^ int(int a, int b) {
return a + b;
};
int result = sumBlock(10, 20);
NSLog(@"%d", result);
*/
// block作为參数传递(block实际指向的是一个函数或者代码块,那么将这个函数或代码块作为參数传递)
// 使用场景:当在开发中,你发现一个方法中的算法,能够有多种实现,你一时还不能确定用哪种更好,你就能够吧方法中当中一个參数定义成block方式
/*
int (^jianBlock)(int a, int b) = ^int(int a, int b){
return a - b;
};
Calculate *cal = [[Calculate alloc]init];
int jian = [cal calculateWithNumber1:10 andNumber2:20 andCalculate:jianBlock];
NSLog(@"%d",jian);
*/
// 注意:假设在作用域范围之内,block是能够使用变量的,可是要在block代码块中改变非块中变量的值就要在变量前加__block
// int x =0;
__block int x =
;
int (^sumBlock)(int a,
int b) = ^ int(int a,
int b) {
int result = (a + b) + x;
// 这个是正确的
x = result;
//这里就必需要求在定义x的时候前加__block
return result;
};
Calculate *cal = [[Calculate
alloc]init];
int sum = [cal
calculateWithNumber1
andNumber2
andCalculate:sumBlock];
NSLog(@"sum = %d",sum);
NSLog(@"x = %d",x);
}
;
}
//
// Calculate.h
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
// 创建一个别名为calculateBlock的block。返回值为int。有两个int类型的參数,这里与指向函数的指针类似
typedef
int (^calculateBlock)(int a,
int b);
@interface Calculate :
NSObject
// 将block作为參数传入
// 这个函数的作用是计算两个数的加减乘除等运算,前两个參数是运算的数字。block类型的第三个參数的计算方法
- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate;
@end
//
// Calculate.m
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Calculate.h"
@implementation Calculate
- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate
{
return calculate(number1, number2);
}
@end
小白学开发(iOS)OC_ block数据类型(2015-08-08)的更多相关文章
- 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)
// // main.m // SEL数据类型 // // Created by admin on 15/8/12. // Copyright (c) 2015年 admin. All rig ...
- 小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)
// // main.m // 使用继承来扩充类 // // Created by admin on 15/8/12. // Copyright (c) 2015年 admin. All ri ...
- 小白学开发(iOS)OC_ 字符串重组(2015-08-13)
// // main.m // 字符串重组 // // Created by admin on 15/8/13. // Copyright (c) 2015年 admin. All right ...
- 小白学开发(iOS)OC_ 字符串的获取 (2015-08-11)
// // main.m // 字符串的获取 // // Created by admin on 15/8/13. // Copyright (c) 2015年 admin. All righ ...
- 小白学开发(iOS)OC_ 字符串写入文件(2015-08-13)
// // main.m // 字符串写入文件 // // Created by admin on 15/8/13. // Copyright (c) 2015年 admin. All rig ...
- 小白学开发(iOS)OC_ 经常使用结构体(2015-08-14)
// // main.m // 经常使用结构体 // // Created by admin on 15/8/13. // Copyright (c) 2015年 admin. All rig ...
- iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值) 使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...
- 小白学 Python(2):基础数据类型(上)
人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 接触一门新的语言,肯定要先了解它的基础数据类型.啥?你问我为啥要先了解基础数据类型? 为了你的生命安全,还是乖乖听我 B ...
- 小白学 Python(3):基础数据类型(下)
人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 前面我们介绍过了数字,本篇我们接着聊另一个常用的基础数据类型:字符串. ...
随机推荐
- [JLOI2011]飞行路线(分层图)
[JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n 个城市设有业务,设这些城市分别标记为 0 到 n−1 ,一共有 m ...
- 洛谷 P2104 二进制
P2104 二进制 题目描述 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运算 1:将整个二进制数加 1 运算 2:将整个二进制数减 1 ...
- HBase快照、Snapshots 淘宝快照
淘宝在2011年之前所有的后端持久化存储基本上与我们所认知的意义, 大量存于 mysql .少量 oracle mongdb 等,使用mysql 的原因相信各位也很熟悉了. 开源.社区庞大.解决方 ...
- 《R实战》读书笔记二
第一章 R简单介绍 本章概要 1安装R 2理解R语言 3执行R程序 本章所介绍的内容概括例如以下. 一个典型的数据分析步骤如图1所看到的. 图1:典型数据分析步骤 简而言之,现今的数据分析要求我们从多 ...
- BestCoder Round #11 (Div. 2)
太菜,仅仅能去Div2.(都做不完 ORZ... 各自是 HDU: 5054pid=5054"> Alice and Bob 5055Bob and math problem 5056 ...
- 【VBA研究】用VBA取得EXCEL随意列有效行数
作者:iamlaosong 用VBA对Excel文件进行处理的时候,keyword段的列号编程时往往是不知道的.须要通过參数设定才干知道,因此.我们编程的时候,就不能用这种语句取有效行数: linen ...
- java 爬虫在 netbeans 里执行和单独执行结果不一样
在做内容測试的时候.发现我的爬虫(前些文章略有提及)在 netbeans 里面可以成功爬取网页内容,而单独执行时,给定一个 url,爬到的网页却与在浏览器里面打开 url 的网页全然不一样,这是一个非 ...
- Metasploit - Tips for Evading Anti-Virus
绕过杀毒软件,有很多钟方法.此处介绍一种,编写python程序调用shellcode,并使用Pyinstaler将python程序编译为exe程序. 准备工作:(Windows XP环境下编译) 将P ...
- Unity multiplayer
using UnityEngine; using System.Collections; public class multiplayer_Button : MonoBehaviour { void ...
- MKVToolNix v8.2
32位版:http://pan.baidu.com/s/1i3s4gGd 64位版: http://pan.baidu.com/s/1gdvqbpp