[OC] Block 是什么】的更多相关文章

刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> String { return ("输出了\(name)") } //通用形式 func name(parameters) -> return type { function body } Swift 中基本的闭包函数与OC中Block的相似点 带参闭包 //OC中Block是这样 v…
1.block是一个特殊的OC对象, 它建立在栈上, 而不是堆上, 这么做一个是为性能考虑,还有就是方便访问局部变量. 2.默认情况下block使用到的局部变量都会被复制,而不是保留.所以它无法改变局部变量的值. 3.如果在变量面前加上__block, 那么编译器回去不会复制变量, 而是去找变量的地址, 通过地址来访问变量, 实际上就是直接操作变量. 4.另外块是在栈上分配的, 所以一旦离开作用域, 就会释放, 因此如果你要把块用在别的地方, 必须要复制一份. 所以在属性定义一个块的时候需要使用…
一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. block实际上是: 指向结构体的指针 BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 (2)利用blo…
http://blog.csdn.net/itpeng523/article/details/23965147 一.先用Xcode创建一个空工程 学习block之前先用弄懂c语言的函数指针 看代码: typedef int (^SumP)(int,int);//用typedef定义一个block类型 void test() { printf("调用了test函数\n"); } int sum(int a,int b) { return a+b; } int main(int argc,…
前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个匿名函数,它和传统的函数指针很类似,但是 Block 是 inline(内联函数)的,并且默认情况下它对局部变量是只读的. 苹果官方建议尽量多用 Block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多. Block 语法 // Block as a local variable ret…
// // main.m // block基本使用 // // Created by Ymmmsick on 15/7/21. // Copyright (c) 2015年 Ymmmsick. All rights reserved. // #import <Foundation/Foundation.h> typedef int (^IntBlock)() ; typedef void (^VoidBlock)(); int main(int argc, const char * argv[…
由ControllerA跳转到controllerB,在controllerB中选择一个参数的值,并将它传回给controllerA. 首先,在controllerB的.h文件中写入: @interface ViewControllerB :UIViewController //定义一个block,返回值为“void”(无返回值),参数类型为 id ,名称为aBlock typedef void(^aBlock)(id); //声明一个上一行定义的block,这个实例化的block的名字叫做“e…
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self showResultByNumber1: andNumber2: andBlock:^(int num1,int num2){ return num1 +num2; }]; // [self textBloc…
#import "Button.h" typedef int (^MySum) (int, int); void test() { // 定义了一个block,这个block返回值是int类型,接收两个int类型的参数 int (^Sum) (int, int) = ^(int a, int b) { return a + b; }; ,); NSLog(@"%i", a); } void test2() { // __block有2个下划线 __block ; /…
原遍历数组NSArray * lines = ...for (NSString * line in lines) { // ...}for (int i = 0; i < lines.count; ++i) { NSString * s = [lines objectAtIndex:i]; ...} 原遍历字典 NSDictionary * dict = … NSArray * keys = [dict allKeys]; for (NSString * key in keys) { NSStr…