`
jsntghf
  • 浏览: 2542607 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

iOS中block的定义及使用

    博客分类:
  • iOS
阅读更多

1、定义

 

2、使用示例

(1)Downloader.h

#import <Foundation/Foundation.h>

typedef void (^SOLWeatherDataDownloadCompletion)(NSDictionary *dic, NSError *error);

@interface Downloader : NSObject

+ (instancetype)sharedDownloader;
- (void)dataForUrl:(NSString *)requestURL completion:(SOLWeatherDataDownloadCompletion)completion;

@end

 

(2)Downloader.m

#import "Downloader.h"

@implementation Downloader

static Downloader *_sharedDownloader = nil;

+ (instancetype)sharedDownloader {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedDownloader = [[super allocWithZone:NULL] init];
    });
    
    return _sharedDownloader;
}

+ (id)allocWithZone:(struct _NSZone *)zone {
    return [Downloader sharedDownloader];
}

- (id)copyWithZone:(struct _NSZone *)zone {
    return [Downloader sharedDownloader];
}

- (void)dataForUrl:(NSString *)requestURL completion:(SOLWeatherDataDownloadCompletion)completion {
    if(!requestURL || !completion)
        return;
    
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:
     ^ (NSURLResponse *response, NSData *data, NSError *connectionError) {
         if(connectionError)
             completion(nil, connectionError);
         else {
             @try {
                 NSError *JSONSerializationError;
                 NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&JSONSerializationError];
                 completion(JSON, connectionError);
             }
             @catch (NSException *exception) {
                 completion(nil, [NSError errorWithDomain:@"Downloader Internal State Error" code:-1 userInfo:nil]);
             }
             @finally {
                 
             }
         }
     }];
}

@end

 

(3)调用示例

static NSString *baseURL =  @"http://api.wunderground.com/api/";
static NSString *parameters = @"/forecast/conditions/q/";
static NSString *APIKey = @"0def10027afaebb7";
NSString *requestURL = [NSString stringWithFormat:@"%@%@%@%f,%f.json", baseURL, APIKey, parameters, 39.897445, 116.331398];
[[Downloader sharedDownloader] dataForUrl:requestURL completion:^(NSDictionary *dic, NSError *error) {
    if (dic)
        NSLog(@"%@",dic);
}];

 

分享到:
评论

相关推荐

    iOS block使用总结

    在iOS开发中,Block是一种强大的、灵活的代码封装机制,它允许我们定义并存储一段可执行的代码,可以在需要的时候调用。Blocks是Objective-C的语法扩展,后来也被引入到Swift中,对于处理异步操作、事件回调、简化...

    iOS Block使用教程

    在iOS开发中,Block是一种强大的编程工具,它允许我们在代码中定义匿名函数或者闭包,使得函数能够作为参数传递,也可以直接在其他函数内部定义和使用。熟练掌握Block的使用对于提升iOS应用的代码质量、可读性和效率...

    ios-block 回调.zip

    "ios-block 回调.zip"中的"CallbackDemo"很可能是展示了一个关于如何在iOS应用中使用Block进行回调的实例。 Block的基本结构由`^`符号开启,后面跟着返回类型(如果有的话),接着是参数列表,最后用`{}`包裹实现的...

    iOS Block 的使用, 包括传值, 基本用法

    例如,一个无参数、无返回值的Block定义如下: ```objc void (^myBlock)() = ^{ NSLog(@"这是Block内部的代码"); }; ``` ### 2. Block的类型 Block有三种类型:全局Block、栈Block和堆Block。全局Block存储在...

    iOS的block回调

    例如,一个简单的Block定义可能如下所示: ```objc int (^myBlock)(int) = ^(int num) { return num * 2; }; ``` Block分为三种类型:全局Block、栈Block和堆Block,这取决于它们的存储位置。栈Block在执行完后会...

    ios-block 多参数传值.zip

    但是栈上的Block不能被其他线程访问,也不能在异步操作中使用。 2. **堆存储(Heap Block)**:如果Block引用了外部对象,编译器会将其存储在堆上,并且需要手动管理内存(使用`copy`属性或者`__strong`关键字)。...

    ios-block反向传值.zip

    我们可以用Block定义任务,然后将其提交到不同的队列中执行。主队列是同步的,而全局队列和自定义队列通常是异步的,这使得Block反向传值成为可能。 总结: Block反向传值是iOS开发中一种常见的技术,用于在异步...

    ios-把block当成属性放在全局字典中的用例.zip

    在iOS开发中,Block是一种强大的语法特性,它允许我们在代码中定义匿名函数或者闭包,可以作为参数传递、返回值,甚至可以作为属性存储。在这个“ios-把block当成属性放在全局字典中的用例.zip”示例中,开发者创建...

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

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

    ios-block逆传值页面间的.zip

    在这个名为"ios-block逆传值页面间的.zip"的资源中,我们主要关注的是如何使用Block来实现页面间的反向传值。Block是Objective-C和Swift中的一种强大的特性,它可以作为参数传递,也可以作为返回值。对于初学者来说...

    ios-Block基础,block传值,及自定义block方法.zip

    在iOS开发中,Block常与Grand Central Dispatch (GCD)结合使用,实现多线程编程。通过Block,我们可以方便地将任务提交到不同的调度队列,如主队列或并发队列,简化异步编程。 6. **Block与KVO**: Block还可以...

    IOS block回调代码实例Demo

    总之,"IOS block回调代码实例Demo"是一个很好的学习资源,它展示了如何在iOS应用中使用Block进行回调,这对于理解和掌握iOS开发中的异步编程至关重要。通过深入研究这个Demo,开发者可以更好地运用Block来优化代码...

    ios Block和代理的对比

    在iOS开发中,Block和代理是两种常用的回调机制,它们都可以用来实现对象间的通信,但具体用法和特性有所差异。下面将详细讲解Block和代理的对比,以及它们各自的应用场景。 首先,Block是一种内联函数,它可以捕获...

    iOS中block的定义与使用

    在iOS开发中,Block是一种强大的特性,它允许你定义并存储一段可执行的代码,可以在需要的时候方便地调用。Block被苹果引入是为了提供一种更简洁、更灵活的方式来处理回调、异步操作以及复杂的逻辑控制。以下是关于...

    iOS Block 界面传值

    1. Block定义:Block 是 Objective-C 对匿名函数的实现,它可以捕获和存储其所在作用域内的变量,包括局部变量和实例变量。Block 可以作为参数传递,也可以作为方法的返回值。 2. Block类型:主要有三种类型,根据...

    IOS Block的使用

    接下来,我们将详细讨论如何在iOS中使用Block,包括作为局部变量、属性以及函数参数的用法。 1. **Block作为局部变量** 在函数或方法内部,我们可以声明并定义一个Block,将其作为局部变量。Block的定义通常以`^`...

    ios 视图间Block传值

    Block是苹果在Cocoa Touch框架中引入的一种强大的闭包特性,它可以捕获和存储其定义范围内的局部变量,并可以在其他地方使用。Block可以作为函数参数,也可以返回Block。在iOS开发中,Block被广泛用于处理异步操作,...

    iOS block实现,内存管理

    2. **函数参数(Function Arguments)**:Block可以作为函数或方法的参数传递,这样可以在函数执行过程中使用Block定义的代码逻辑。 3. **静态变量(Static Variables)**:局部静态变量和全局静态变量在Block中...

    iOS block基础使用

    本文将深入探讨如何在iOS中使用Block。 ### 一、Block定义 Block 是一种匿名函数,可以在代码中定义,无需预先声明。Block 的基本语法如下: ```objc ^return_type (parameter_list) { // Block 体 } ``` 例如...

    ios-block循环引用的三种解决办法.zip

    在iOS开发中,Block是一种强大的特性,它允许我们在代码中定义可执行的代码块,类似于匿名函数。然而,如果不小心处理,Block可能会导致循环引用,从而引起内存泄漏问题。本资料包“ios-block循环引用的三种解决办法...

Global site tag (gtag.js) - Google Analytics