• Block的基本概念
  • Block的基本用法
  • Block实现委托机制

一、Block的基本概念

Block是程序的代码块,这个代码块可以在需要的时候执行。IOS开发中,block到处可见,所以学好很重要

二、Block的基本用法

//
// main.m
// Block
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import <Foundation/Foundation.h> //最基本的用法
void test()
{
int (^Sum)(int, int) = ^(int a, int b)
{
return a + b;
}; NSLog(@"%i", Sum(, ));
} //也是基本用法,另外Block代码段中可以使用外边的mul变量,但是不可以改变他的值,如果下改变他的值,可以使用__block来定义mul
void test1()
{
int mul = ;
int (^myBlock)(int) = ^(int num)
{
return mul * num;
}; int c = myBlock(); NSLog(@"%i", c);
} //改变外边变量的值
void test2()
{
__block int mul = ;
int (^myBlock)(int) = ^(int num)
{
mul = ;
NSLog(@"mul is %i", mul);
return mul * num;
}; int c = myBlock(); NSLog(@"%i", c);
} //给block起一个别名,之后我们就可以任意命名的来使用block
void test3()
{
typedef int (^MySum)(int, int); MySum sum = ^(int a, int b)
{
return a + b;
}; int c = sum(, ); NSLog(@"%i", c); } int main(int argc, const char * argv[])
{ @autoreleasepool {
test();
}
return ;
}

OK,都有注释。在main函数中调用即可测试

三、Block来实现委托模式

//
// Button.h
// Block_Button
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import <Foundation/Foundation.h>
@class Button; //给block给一个别名ButtonBlock
typedef void (^ButtonBlock)(Button *); @interface Button : NSObject //定义一个block的成员变量,暂时写成assign
@property (nonatomic, assign) ButtonBlock block; -(void)click; @end
//
// Button.m
// Block_Button
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import "Button.h" @implementation Button //模拟点击
-(void)click
{
//回调函数,回调block
_block(self);
} @end
//
// main.m
// Block_Button
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Button.h" int main(int argc, const char * argv[])
{ @autoreleasepool { Button *btn = [[[Button alloc] init] autorelease]; //回调的函数
btn.block = ^(Button *btn)
{
NSLog(@"%@被点击", btn);
}; [btn click]; }
return ;
}

OC之Block的用法和实现委托的更多相关文章

  1. iOS开发 - OC - block的详解 - 基础篇

    深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...

  2. OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...

  3. 李洪强iOS开发之OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么? 苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相 ...

  4. OC语言-block and delegate

    参考博客 OC语言BLOCK和协议 iOS Block iOS Block循环引用精讲 iOS之轻松上手block 深入浅出Block的方方面面 Block apple官方参考 1.定义一个block ...

  5. OC语言Block 续

    OC语言 Block 转载:http://blog.csdn.net/weidfyr/article/details/48138167 1.Block对象中的变量行为 结论: 在block代码块内部可 ...

  6. OC语言Block

    OC语言Block 一.Block (一)简介  Block是什么?苹果推荐的比较特殊的数据类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. Block和 ...

  7. iOS OC语言: Block底层实现原理

    先来简单介绍一下BlockBlock是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,Block可以在任何时候执行. Block和函数的相似性:(1)可以保存代码(2) ...

  8. OC基础--block

    block与函数类似:1.可以保存代码 2.又返回值 3.有形参 4.调用方式一样 block的标志:^ 一.定义一个无参无返回值的block void (^myBlock)();--1.void 代 ...

  9. OC:Block语法、Block使用、Block实现数组排序

    Block //定义一个求两个数最大值函数 int maxValue (int ,int); //函数的实现 int maxValue (int a, int b){ return  a > b ...

随机推荐

  1. I/O小总结

    //判断不存在就创建目录 ,然后拷贝文件 DirectoryInfo di = null; if (!Directory.Exists(n.Attribute("value").V ...

  2. CCS5 编译器手动设置dsp支持可变参数宏等问题

    IDE:CSS5.4,compiler不支持可变参数宏.需要手动设置编译器相关选项: Language Option->Language Mode —>no strict ANSI. 1. ...

  3. MPMoviePlayerController 视频播放器—IOS开发

    MPMoviePlayerController 与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程UR ...

  4. How Tomcat Works(九)

    本文接下来描述servlet容器是怎样管理其相关组件的生命周期的,首先本人描述一下事件监听模式,也可以称为观察者模式,该模式分为以下角色 即抽象主题角色 具体主题角色 抽象观察者角色及具体观察者角色, ...

  5. 【tcl脚本】改变输出字符格式

    需求: 原list输出格式 0x00 0x50 0x01 0x03 0x04 0x02 0x21 0x57 0x01 0x00 0x05 0x0B 0x03 0x13 0x00 0x01 要求list ...

  6. ASP.NET MVC 修改视图的默认路径(MVC2,MVC3)

    ASP.NET MVC2 修改视图的默认路径 步骤:1.编写继承自WebFormViewEngine的类,重写视图路径 2.在Application_Start()中添加语句: ViewEngines ...

  7. (剑指Offer)面试题26:复杂链表的复制

    题目: 请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表. 在复杂链表中,每个结点除了有一个pNext指针指向下一个结点之外,还 ...

  8. Maven仓库的布局

    任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式.例如log4j:log4j:1.2.15这一依赖,其对应的仓库路径为log4j/log4j/ ...

  9. ECharts地图中tooltip提示框通过formatter分别显示多个数值

    我原来的CSDN博客上写过这篇文章:http://blog.csdn.net/giscript/article/details/52162165 但是现在发现了代码中存在一个bug,在此更正. 按照原 ...

  10. Flume-NG + HDFS + HIVE 日志收集分析

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...