`
JavaZhuang
  • 浏览: 10303 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

5 0.OC16-Block

    博客分类:
  • IOS
 
阅读更多

5 0.OC16-Block

Block

1)Blocks封装了一段代码,可以在任何时候执行

2)Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocksinline(内联函数的),并且默认情况下它对局部是只读的

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

 

Blocks的定义



 

例一

Main.m

 //

//  main.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-9.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

#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;

    };

    

    int a = Sum(10, 11);

    NSLog(@"%i", a);

}

 

void test2(){

    //__block2个下划线

    __block int c = 15;

    

    //声明了一个block变量

    mySum sum = ^(int a, int b){

        //如果外部的变量用了__block关键字,就可以在block内部修改这个变量

        c = 19;

        //block可以访问外面定义的变量

        NSLog(@"c is %i", c);

        return a + b;

    };

    

    NSLog(@"%i", sum(10, 10));

    

}

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

//      test2();

        

        Button *btn = [[[Button alloc] init] autorelease];

       

        btn.block = ^(Button *btn){

            NSLog(@"按钮-%@被点击了", btn);

        };

        

        //模拟按钮点击

        [btn click];

    }

    return 0;

}

 

Button.h

 //

//  Button.h

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

@classButton;

 

typedef void (^ButtonBlock) (Button *);

 

@interface Button : NSObject

 

@property (nonatomic, assign) ButtonBlock block;

 

//模拟按钮点击

- (void)click;

 

@end

 

 

Button.m

 //

//  Button.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import "Button.h"

 

@implementation Button

- (void)click{

    _block(self);

}

 

@end

 

 

 

 

 

分享到:
评论

相关推荐

    OC中以block形式页面传值

    本篇文章将详细探讨OC中如何以Block形式进行页面间的数据传递。 Block是Objective-C的一个重要特性,它允许我们将一段代码封装起来作为一个对象传递。Block可以捕获并存储其所在上下文中的变量,这使得Block在处理...

    iOS进阶 - Block底层原理

    - **ISA指针:** Block本质上是Objective-C中的一个对象,它内部有一个`isa`指针,用于指向Block类的元类,这与普通的OC对象是一致的。 - **封装性:** Block不仅包含了函数体内的代码逻辑,还封装了执行这段代码...

    OC-block执行完外面的程序才执行方法本身

    在Objective-C(OC)编程中,块(Block)是一种强大的特性,它允许我们在代码中定义可执行的代码段,这些代码段可以作为参数传递、存储和稍后执行。标题"OC-block执行完外面的程序才执行方法本身"指的是在Objective-...

    af-phy-0039.000.pdf.zip_Deal With It_sonet

    3. a cell format and extra signals for a 16-bit wide data path for future use The Level 1 Specification was designed to deal with the following PHY layer interfaces : 1. 2. 3. 4. 5. 155.52 Mbps (SONET...

    ios-block作为对象属性和返回值的展示方式.zip

    在iOS开发中,Block是一种强大的编程工具,它允许我们在代码中定义可执行的代码块,类似于函数,但可以在运行时动态地使用。本教程将深入探讨如何将Block用作对象属性以及作为返回值来增强代码的灵活性和可读性。 ...

    iOS---OC版---日历(酒店)

    这篇博客文章 "iOS---OC版---日历(酒店)" 提供了关于如何在Objective-C(OC)环境下实现iOS日历功能的详细教程。下面我们将深入探讨相关的知识点。 1. **EventKit框架**:iOS中的日历功能主要通过EventKit框架来...

    Microsoft CDIMAGE v2.52

    -oc slower duplicate file detection using binary comparisons rather than MD5 hash values -oi ignore diamond compression timestamps when comparing files -os show duplicate files while creating ...

    CDIMAGE 2.52

    -oc slower duplicate file detection using binary comparisons rather than MD5 hash values -oi ignore diamond compression timestamps when comparing files -os show duplicate files while creating ...

    css之display属性之inline-block布局实现详解

    5. **`inline-block`存在的问题及其解决** - **间隙问题**:在`inline-block`元素之间有时会出现4像素的间隙,这是由于换行产生的空白字符导致的。 - **去除空隙的方法**: - 对父元素设置`font-size: 0`,这样...

    兼容性的 inline-block 属性

    一年前网上还找不到关于 inline-block 属性的文章,为了方便大家更好的理解该属性,当时总结整理了篇《display:inline-block的深入理解》。 而现在对于 inline-block 属性运用的需求也越来越多,可惜依旧只有 Fire...

    ios-iOS-OC-页面传值的5种方法.zip

    本资料"ios-iOS-OC-页面传值的5种方法.zip"主要探讨了五种在OC中常见的页面间传递数据的方法,适用于初学者快速入门。以下是这五种方法的详细说明: 1. **属性赋值(Property Assignment)** 这是最基础的传值方式...

    浅谈inline-block及解决空白间距

    在网页布局中,`display: inline-block` 是一个非常有用的 CSS 属性,它允许元素表现得像内联元素(inline)一样,同时可以设置宽高(block-like)。然而,在使用 `display: inline-block` 时,经常会遇到一个问题,...

    关于css display: inline block inline-block的区别分析

    display:inline-block 将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。 但对于这个属性不是所有浏览器都识别。 支持的浏览器有:Opera、Safari。 但很遗憾,最...

    CSS教程:inline-block在各浏览器的显示

    《CSS教程:深入理解inline-block在各浏览器的显示差异》 CSS中的display属性是一个非常重要的样式规则,它决定了元素如何在页面上呈现。在众多的display值中,`inline-block`是一个特别有用的值,它结合了`inline`...

    ios-block的局部变量和全局变量和static的静态变量联系.zip

    在iOS开发中,Block、局部变量、全局变量和静态变量(`static`)是编程中常见的概念,它们各自有自己的特点和用途,同时在特定情况下,它们之间也存在一定的联系。让我们详细探讨一下这些知识点。 首先,Block是...

    qt-oc-micphoneAuthorization.zip

    5. app.pro:Qt项目的配置文件,包含了项目所依赖的模块和源文件。 首先,我们要了解在MacOS中,应用需要用户授权才能访问敏感资源如麦克风。从iOS 10开始,Apple引入了Privacy Preferences Policy Control(PPPC)...

    Async.OC:Objective-C中的语法糖,用于Grand Central Dispatch中的异步调度

    异步OC 用Objective-C重写 。 要获得对iOS 7和OS X 10.9的支持,请查看 。 异步糖看起来像这样: Async.background(^{ NSLog ( @" A: This is run on the background " );}).main(^{ NSLog ( @" B: This is run on ...

    微软内部镜像封装工具:CDIMAGE 2.54 (版本绝对正确!!!)

    -oc 使用二進位比對代替 MD5 雜湊值, 這會以較慢的速度比對重複的檔案. -oi 比對檔案時忽略高度壓縮的時間戳記 -os 建立影像檔時顯示重複的檔名 (-o 等類似參數不可簡寫為 -ocis) -w 依照數字提供不同的警告等...

    微软内部镜像封装工具:CDIMAGE 2.52

    -oc 使用二進位比對代替 MD5 雜湊值, 這會以較慢的速度比對重複的檔案. -oi 比對檔案時忽略高度壓縮的時間戳記 -os 建立影像檔時顯示重複的檔名 (-o 等類似參數不可簡寫為 -ocis) -w 依照數字提供不同的警告等...

Global site tag (gtag.js) - Google Analytics