`

Iphone 使用Blocks

阅读更多

格式说明:void (^now)( void ) 格式: 返回值(^名称)参数

 

先主要发一些代码,等有时间再具体说明

 

代码一 : 主要是循环返回 i与3的积,并打印

 

.h文件

@interface Worker : NSObject {
}
 
+ (void)iterateFromOneTo:(int)limit withBlock:(int (^)(int))block;
 
@end

 .m文件

@implementation Worker
 
+ (void)iterateFromOneTo:(int)limit withBlock:(int (^)(int))block {
    for (int i = 1; i <= limit; i++) {
        int result = block(i);
        NSLog(@"iteration %d => %d", i, result);
    }
}
 
@end

 调用时:

[Worker iterateFromOneTo:5 withBlock:^(int number) {
    return number * 3;
}];

 也可以这样:

int (^tripler)(int) = ^(int number) {
    return number * 3;
};
 
[Worker iterateFromOneTo:5 withBlock:tripler];

 结果:

iteration 1 => 3
iteration 2 => 6
iteration 3 => 9
iteration 4 => 12
iteration 5 => 15

 代码二: 使用TypeDef 简化代码,使代码更可读

.h文件

typedef int (^ComputationBlock)(int);
 
@interface Worker : NSObject {
}
 
+ (void)iterateFromOneTo:(int)limit withBlock:(ComputationBlock)block;
 
@end

 .m文件

@implementation Worker
 
+ (void)iterateFromOneTo:(int)limit withBlock:(ComputationBlock)block {
    for (int i = 1; i <= limit; i++) {
        int result = block(i);
        NSLog(@"iteration %d => %d", i, result);
    }
}
 
@end

 代码三 : 当播放时,自动删除已经播放的名称

.h文件

typedef void (^MoviePlayerCallbackBlock)(NSString *);
 
@interface MoviePlayer : NSObject {
}
 
@property (nonatomic, copy) MoviePlayerCallbackBlock callbackBlock;
 
- (id)initWithCallback:(MoviePlayerCallbackBlock)block;
- (void)playMovie:(NSString *)title;
 
@end

 .m文件

#import "MoviePlayer.h"
 
@implementation MoviePlayer
 
@synthesize callbackBlock;
 
- (id)initWithCallback:(MoviePlayerCallbackBlock)block {
    if (self = [super init]) {
        self.callbackBlock = block;
    }
    return self;
}
 
- (void)playMovie:(NSString *)title {
    // play the movie
    self.callbackBlock(title);
}
 
- (void)dealloc {
    [callbackBlock release];
    [super dealloc];
}
 
@end

 引用代码

NSMutableArray *movieQueue =
    [NSMutableArray arrayWithObjects:@"Inception",
                                     @"The Book of Eli",
                                     @"Iron Man 2",
                                     nil];
 
MoviePlayer *player =
    [[MoviePlayer alloc] initWithCallback:^(NSString *title) {
        [movieQueue removeObject:title];
}];
 
for (NSString *title in [NSArray arrayWithArray:movieQueue]) {
    [player playMovie:title];
};

 

Notice that the block uses the local movieQueue variable, which becomes part of the state of the block. When the block is called it removes the movie title from the movieQueue array even though it’s out of scope by that time. After all the movies have been played, the movieQueue will be empty.

 

参考链接:http://pragmaticstudio.com/blog/2010/9/15/ios4-blocks-2

分享到:
评论

相关推荐

    iphone blocks

    ### iPhone Blocks:面向高级开发者的深入探讨 #### 标题解析 标题“iPhone Blocks”指向的是苹果设备(尤其是iPhone)中的编程技术——Blocks。Blocks是Objective-C中的一个重要特性,它为开发者提供了更灵活、...

    iPhonetoolchain4.0(Ubuntu10.10开发环境)推荐.pdf

    【标题】: "iPhonetoolchain4.0在Ubuntu10.10开发环境的配置与使用指南" 本文将详细介绍如何在Ubuntu 10.10操作系统上配置和使用iPhonetoolchain 4.0,这是一个针对iOS开发的工具链,特别适合在Ubuntu 10.10环境下...

    Cocos2D-iPhone开发教程

    - **Blocks/Closures**: 在Cocos2D中,Block常用于定义回调函数,简化异步操作。 通过学习这些核心概念,开发者可以构建出功能丰富的2D游戏和应用。每本教程的章节可能覆盖了这些知识点的一部分或全部,逐步深入,...

    Beginning_iPhone_3_Development代码

    开发者需要掌握类、对象、协议、继承等面向对象编程概念,以及 Blocks 和 Category 等Objective-C特有的特性。 2. **Cocoa Touch框架**: 这是iOS应用开发的核心框架,包含UIKit、Foundation等库。源码中会用到...

    Learn iPhone and iPad Cocos2D Game Development

    As you move along, you’ll learn about possible stumbling blocks and how to navigate them successfully. As you move from beginning to advanced, you’ll encounter general game programming wisdom, tips...

    斯坦福大学iPad&iPhone;开发教程2011秋

    最后,(10.Blocks.and.Multithreading).pdf介绍了多线程和Blocks, Blocks是Objective-C中的一种内联函数,常用于异步操作和并发编程,理解并熟练使用它们能有效提升应用性能。 这套教程适合对iOS开发感兴趣的初学...

    Apress.iPhone.Advanced.Projects.Oct.2009.pdf

    9. **Jonathan Saggau** 提供了提高界面响应性的个人技巧,包括使用“blocks”和其他高级技术,这些对于提升用户体验至关重要。 10. **Joe Pezzillo** 深入探讨了iPhone OS 3的Apple Push Notification Service ...

    object-C &&iphone开发入门

    接下来,iPhone开发主要使用Xcode IDE,这是Apple提供的集成开发环境,用于编写iOS应用。Xcode集成了源代码编辑器、调试器、界面设计工具Interface Builder等,使得开发者可以在一个统一的环境中完成整个应用的开发...

    Object-c for iphone

    总的来说,"Object-c for iPhone" 主要涵盖的内容是使用 Objective-C 这种编程语言进行 iPhone 应用程序的开发,涉及到类、对象、消息传递等基础知识,以及如何利用 Objective-C 的特性结合苹果的开发框架(如 UIKit...

    IOS应用源码——nluchkin-Sosial-Blocks-497fe69.zip

    【标签】"ios 源码"明确了这个项目与iOS平台相关,意味着它是用Objective-C或Swift编程语言编写的,适用于Apple的移动设备,如iPhone和iPad。源码标签表明我们能够深入了解应用的内部工作原理,学习和借鉴其设计模式...

    IOS应用源码——SpaceBubble Source Code for iPhone OS 3.rar

    在iPhone OS 3的时代,Objective-C是主要的编程语言,因此源码会大量使用Objective-C语法,包括消息传递、协议、类别以及类别扩展等特性。开发者可能还会利用Blocks和GCD(Grand Central Dispatch)来处理多线程问题...

    Manning.iPhone.and.iPad.in.Action.Aug.2010.rar

    Objective-C作为iOS开发的主要语言,其语法特性,如消息传递、类别、协议、 blocks等,可能是书中的重点内容。随着Swift的普及,书中也可能涉及Swift语言的基础知识,以便开发者能进行跨语言的对比学习。 在数据...

    iOS iPhone多线程编程指南(中英文版本的两个pdf文件

    5. **Blocks**:在iOS开发中,Blocks是一种内联函数,常用于GCD和NSOperationQueue中。指南会解释Block的定义、类型和使用方法。 6. **线程安全**:多线程环境下,数据一致性是个挑战。指南会讨论线程安全编程,...

    book developer

    综上所述,《Book Developer》文档详细介绍了Blocks编程技术的核心概念和技术细节,包括如何声明、创建和使用Blocks,以及Blocks与变量之间的交互方式等。对于iOS开发者而言,掌握Blocks的使用是必不可少的一项技能...

    iphone开发比较实用,object-c注意事项,能提高不少

    5. ** Blocks**:Objective-C中的Blocks是内联函数,可作为参数传递,存储在变量中。它们用于异步编程,如GCD(Grand Central Dispatch)或处理数组。 6. **内存管理**:Objective-C曾经使用MRR(Manual Reference ...

    采用ARC-Blocks-GCD 封装的网络下载类库(iPhone源代码)

    来源:Licence:Custom作者:iiDebug  封装了ARC-Blocks-GCD 下的网络下载,支持异步下载,使用非常简单。同时也是学习ARC-Blocks-GCD搭配模式开发的好示例。

    【iOS.5.Programming.Cookbook】[PDF+源代码] [iPhone/iPad/iOS]

    书中深入探讨了Objective-C语言,这是iOS开发的主要语言,包括面向对象编程的概念、内存管理和 Blocks。此外,还详细讲解了UIKit框架,它是iOS应用的核心,包含了许多用于显示、交互和动画的关键类。例如,开发者会...

    iphone动画效果

    4. 使用动画块(animation blocks)和完成回调,以更好地控制动画的开始和结束。 七、高级技巧 1. 自定义动画曲线:通过`CAMediaTimingFunction`可以创建定制的时间函数,让动画更符合预期的运动感觉。 2. 动画组...

Global site tag (gtag.js) - Google Analytics