iOS 的块操作也可以象Java匿名类一样到处都是

iOS 的块操作也可以象Java匿名类一样到处都是

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生
-  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

整理一份之前对 ASIHTTPRequest 的分类封装

今天有点累,突然想到,先留个坑,明天用足足的代码来填满这个坑 ,后续会把以前工作中做的总结,陆续回忆并记录到这里。

预告:

NSData+ASIHTTPRequest

NSDictionary+ASIHTTPRequest

NSObject+ASIHTTPRequest

NSString+ASIHTTPRequest

下面开始填坑,以下仅对 NSObject的分类给予相关代码说明,其它的可以从这个扩展,就自个弄吧。

类声明文件:

//NSObject+ASIHTTPRequest.h
#import <Foundation/Foundation.h>
#import "ASIFormDataRequest.h"

@interface NSObject (ASIHTTPRequest)

- (void)postUrlPath:(NSString *)urlPath body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail;
- (void)getUrlPath:(NSString *)urlPath param:(id)param success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail;
- (void)requestUrlPath:(NSString *)urlPath method:(NSString *)method body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail;

@end

类实现文件:

// NSObject+ASIHTTPRequest.m

#import "NSObject+ASIHTTPRequest.h"

@implementation NSObject (ASIHTTPRequest)

- (void)postUrlPath:(NSString *)urlPath body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail {

    [self requestUrlPath:urlPath method:@"POST" body:body success:success fail:fail];
}

- (void)getUrlPath:(NSString *)urlPath param:(id)param success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail {

    [self requestUrlPath:urlPath method:@"GET" body:param success:success fail:fail];
}

- (void)requestUrlPath:(NSString *)urlPath method:(NSString *)method body:(id)body success:(void (^)(ASIFormDataRequest *request))success fail:(void (^)(ASIFormDataRequest *request))fail {

    NSURL *url = [NSURL URLWithString:urlPath];
    __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    __weak ASIFormDataRequest *blockRequest = request;

    [request setShouldContinueWhenAppEntersBackground:YES];
    [request setPostValue:[UIDevice currentDevice].model forKey:@"clienttype"];
    [request setRequestMethod:method];

    // 如果是 GET 或 POST 方法,并且协议体不为空,则添加参数(以下更适用于 ASIHTTPRequest)
    if (nil != body) {

        if ([@"POST" isEqualToString:method]) {

            if ([body isKindOfClass:[NSDictionary class]]) {

                NSDictionary *bodyDic = (NSDictionary *)body;
                for (NSString *key in bodyDic.allKeys) {

                    id object =[bodyDic objectForKey:key];
                    [request setPostValue:object forKey:key];
                }
            }
            else if ([body isKindOfClass:[NSString class]] || [body isKindOfClass:[NSData class]]) {

                NSData *tempData = nil;
                if ([body isKindOfClass:[NSString class]]) {
                    tempData = [body dataUsingEncoding:NSUTF8StringEncoding];
                }
                else {
                    tempData = body;
                }
                [request setPostBody:[NSMutableData dataWithData:tempData]];
                [request setPostLength:[tempData length]];
            }

        }
        else if ([@"GET" isEqualToString:method]) {

            // 增加 GET 参数
            if ([body isKindOfClass:[NSDictionary class]]) {

                NSDictionary *bodyDic = (NSDictionary *)body;
                NSMutableString *paramStr = [[NSMutableString alloc] init];
                for (NSString *key in bodyDic.allKeys) {

                    id object =[bodyDic objectForKey:key];
                    [paramStr appendFormat:@"%@=%@&", key, object];
                }
                NSString *urlWithParam = [urlPath stringByAppendingFormat:@"?%@", paramStr];
                NSLog(@"urlWithParam = %@", urlWithParam);
                request.url = [NSURL URLWithString:urlWithParam];
            }
            else if ([body isKindOfClass:[NSString class]] || [body isKindOfClass:[NSData class]]) {

                NSString *paramStr = nil;
                if ([body isKindOfClass:[NSString class]]) {
                    paramStr = (NSString *)body;
                }
                else {
                    paramStr = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
                }
                NSString *urlWithParam = [urlPath stringByAppendingFormat:@"?%@", paramStr];
                NSLog(@"urlWithParam = %@", urlWithParam);
                request.url = [NSURL URLWithString:urlWithParam];
            }

            // 清空 POST 包体
            [request setPostBody:nil];
            [request setPostLength:0];
        }
        else {

        }
    }

    [request setCompletionBlock:^{

        success(blockRequest);
    }];

    [request setFailedBlock:^{
        fail(blockRequest);
    }];

    [request startAsynchronous];
}

@end
时间: 2024-10-23 21:36:45

iOS 的块操作也可以象Java匿名类一样到处都是的相关文章

java匿名类-java当中如何区分匿名对象和匿名类

问题描述 java当中如何区分匿名对象和匿名类 java当中如何区分匿名对象和匿名类 有没有匿名方法这种概念 学了几个月了,感觉自己还是新手状态,很多基本概念还不是很清楚 解决方案 匿名对象: Person类: new Person(); 这就是一个匿名对象 匿名类: new Person(){ String name; }; 这就是一个匿名类 简单说就是,匿名对象还是一个对象,它必须有已经写好的成员变量.属性.方法 匿名类,在声明它的对象的时候,才对它进行代码的构造(封装它的成员变量.属性.方

关于JAVA匿名类和内部类的一点讨论

 基本理论:-----------------------------------------------------关于JAVA内部类:一个内部类的定义是定义在另一个类内部的类. 存在它的原因是: 1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据.即内部类实例对包含它的哪个类的实例来说,是特权的. 2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它. 3.匿名内部类可以很方便的定义回调. 4.

java匿名类和匿名对象及this的其他用法

/* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){     子类内容:(覆盖父类的, 而且可以增加自己的方法) }//相当于将 继承父类 和 new 的过程 写到了一起有某有!很方便有某有! */ class Outer{         int num;     public Outer(){         num = 5;        }           clas

java匿名类-你好,new一个方法不是生成一个对象,怎么就生成了一个匿名类呢

问题描述 你好,new一个方法不是生成一个对象,怎么就生成了一个匿名类呢 你好,new一个方法不是生成一个对象,怎么就生成了一个匿名类呢 我对new关键词的用法不是很清楚 解决方案 先看段伪代码 abstract class Father(){ .... } public class Test{ Father f1 = new Father(){ .... } //这里就是有个匿名内部类 } 一般来说,new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了. 但是出现匿名内部类就

蓝桥杯 java 操作格子-操作格子蓝桥杯java线段树也超限怎么办

问题描述 操作格子蓝桥杯java线段树也超限怎么办 如题: 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大值. 对于每个2.3操作输出你所求出的结果. 输入格式 第一行2个整数n,m. 接下来一行n个整数表示n个格子的初始权值. 接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x

ios coredata数据操作-iOS coredata数据操作

问题描述 iOS coredata数据操作 各位大大求指导:用coredata做个新闻类的APP,每次从服务器上请求的数据和本地coredata里面的数据进行对比(有一个专门id来区别每条信息),如果有相同的id就不对本地数据进行更新,如果本地coredata的数据库里面没有从网上请求最新的id,删除本地数据,插入新id的数据. 最终结果就是本地数据库信息条数不会变化,求指导

poi.jar操作excel,在java中可以。android上就不行了,求大神看看,谢谢!急等

问题描述 poi.jar操作excel,在java中可以.android上就不行了,求大神看看,谢谢!急等 在java中可以.移植到android上就不行了. 这个是在android中运行报的错误. 解决方案 真心不知道怎么弄..然后就果断用jxl.jar了...哎... 解决方案二: 大神们,帮忙看看.谢谢啦...真心急等..

Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)

枚举的特点: ◆类型安全(Type Safety)  ◆紧凑有效的枚举数值定义(Compact, Efficient Declaration of Enumerated Values)  ◆无缝的和程序其它部分的交互操作(Seamless integration with other language features)  ◆运行的高效率(Runtime efficiency) 详情请看:http://www.51cto.com/specbook/11/32877.htm 1.使用Java普通类

Java 中的内部类和匿名类

Java 内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口.由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能. 不过你可能要质疑,更改一下方法的不就行了吗? 的确,以此作为设计内部类的理由,实在没有说服力. 真正的原因是这样的,java 中的内部类和接口加在一起,可以的解决常被 C++ 程序员抱怨 ja