5 0.OC16-Block
Block
1)、Blocks封装了一段代码,可以在任何时候执行
2)、Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocks是inline(内联函数的),并且默认情况下它对局部是只读的
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(){ //__block有2个下划线 __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形式进行页面间的数据传递。 Block是Objective-C的一个重要特性,它允许我们将一段代码封装起来作为一个对象传递。Block可以捕获并存储其所在上下文中的变量,这使得Block在处理...
- **ISA指针:** Block本质上是Objective-C中的一个对象,它内部有一个`isa`指针,用于指向Block类的元类,这与普通的OC对象是一致的。 - **封装性:** Block不仅包含了函数体内的代码逻辑,还封装了执行这段代码...
在Objective-C(OC)编程中,块(Block)是一种强大的特性,它允许我们在代码中定义可执行的代码段,这些代码段可以作为参数传递、存储和稍后执行。标题"OC-block执行完外面的程序才执行方法本身"指的是在Objective-...
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是一种强大的编程工具,它允许我们在代码中定义可执行的代码块,类似于函数,但可以在运行时动态地使用。本教程将深入探讨如何将Block用作对象属性以及作为返回值来增强代码的灵活性和可读性。 ...
这篇博客文章 "iOS---OC版---日历(酒店)" 提供了关于如何在Objective-C(OC)环境下实现iOS日历功能的详细教程。下面我们将深入探讨相关的知识点。 1. **EventKit框架**:iOS中的日历功能主要通过EventKit框架来...
-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 ...
-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 ...
5. **`inline-block`存在的问题及其解决** - **间隙问题**:在`inline-block`元素之间有时会出现4像素的间隙,这是由于换行产生的空白字符导致的。 - **去除空隙的方法**: - 对父元素设置`font-size: 0`,这样...
一年前网上还找不到关于 inline-block 属性的文章,为了方便大家更好的理解该属性,当时总结整理了篇《display:inline-block的深入理解》。 而现在对于 inline-block 属性运用的需求也越来越多,可惜依旧只有 Fire...
本资料"ios-iOS-OC-页面传值的5种方法.zip"主要探讨了五种在OC中常见的页面间传递数据的方法,适用于初学者快速入门。以下是这五种方法的详细说明: 1. **属性赋值(Property Assignment)** 这是最基础的传值方式...
在网页布局中,`display: inline-block` 是一个非常有用的 CSS 属性,它允许元素表现得像内联元素(inline)一样,同时可以设置宽高(block-like)。然而,在使用 `display: inline-block` 时,经常会遇到一个问题,...
display:inline-block 将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。 但对于这个属性不是所有浏览器都识别。 支持的浏览器有:Opera、Safari。 但很遗憾,最...
《CSS教程:深入理解inline-block在各浏览器的显示差异》 CSS中的display属性是一个非常重要的样式规则,它决定了元素如何在页面上呈现。在众多的display值中,`inline-block`是一个特别有用的值,它结合了`inline`...
在iOS开发中,Block、局部变量、全局变量和静态变量(`static`)是编程中常见的概念,它们各自有自己的特点和用途,同时在特定情况下,它们之间也存在一定的联系。让我们详细探讨一下这些知识点。 首先,Block是...
5. app.pro:Qt项目的配置文件,包含了项目所依赖的模块和源文件。 首先,我们要了解在MacOS中,应用需要用户授权才能访问敏感资源如麦克风。从iOS 10开始,Apple引入了Privacy Preferences Policy Control(PPPC)...
异步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 ...
-oc 使用二進位比對代替 MD5 雜湊值, 這會以較慢的速度比對重複的檔案. -oi 比對檔案時忽略高度壓縮的時間戳記 -os 建立影像檔時顯示重複的檔名 (-o 等類似參數不可簡寫為 -ocis) -w 依照數字提供不同的警告等...
-oc 使用二進位比對代替 MD5 雜湊值, 這會以較慢的速度比對重複的檔案. -oi 比對檔案時忽略高度壓縮的時間戳記 -os 建立影像檔時顯示重複的檔名 (-o 等類似參數不可簡寫為 -ocis) -w 依照數字提供不同的警告等...