iOS简单封装网络请求,使用block回掉函数方式

//
//  RequestHttpClass.h
//  封装简单的异步请求

#import <Foundation/Foundation.h>

// 相当于定义一个函数指针
typedef void(^FinishLoadBlock)(NSData *);

@interface RequestHttpClass : NSMutableURLRequest <NSURLConnectionDataDelegate>

// 存储异步请求的数据
@property (nonatomic, retain) NSMutableData *data;
@property (nonatomic, retain) NSURLConnection *connection;
@property (nonatomic, copy)FinishLoadBlock block;

- (void)startAsync;
- (void)cancel;
@end


//
//  RequestHttpClass.m
//  RequestClass
//
//  Copyright (c) 2013年 TestApp. All rights reserved.
//

#import "RequestHttpClass.h"

@implementation RequestHttpClass

-(void)startAsync {
    self.data = [[NSMutableData alloc] init];
    
     // 发起异步请求
    self.connection = [NSURLConnection connectionWithRequest:self delegate:self];
    
}

- (void)cancel {
    [self.connection cancel];
}

// 异步请求每次返回的数据
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.data appendData:data];
}

// 异步请求结束数据返回
- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
    self.block(_data);
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"请求网络出错:%@", error);
}

-(void) dealloc {
    [_data release];
    [super dealloc];
}

//
//  RequestData.h
//  RequestClass
//
//  Copyright (c) 2013年 TestApp. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef void(^Completion)(id);

@interface RequestData : NSObject

// 访问天气预报接口
+ (void)getWeatherData:(NSDictionary *)params block: (Completion) block;

@end


//
//  RequestData.m
//  RequestClass
//
//  Created by 王德康 on 13-10-2.
//  Copyright (c) 2013年 TestApp. All rights reserved.
//

#import "RequestData.h"
#import "RequestHttpClass.h"

#define BASE_URL @"http://www.weather.com.cn/data/sk/"

@implementation RequestData

+ (void)getWeatherData:(NSDictionary *)params block:(Completion )block {
    
    NSString *cityCode = [params objectForKey:@"code"];
    NSString *urlstring = [BASE_URL stringByAppendingFormat:@"%@.html",cityCode];
    
    RequestHttpClass *request = [RequestHttpClass requestWithURL:[NSURL URLWithString:urlstring]];
    [request setHTTPMethod:@"GET"];
    [request setTimeoutInterval:60];
    
    request.block = ^(NSData *data) {
        id ret = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        block(ret);
    };
    
    [request startAsync];
}
@end

转载于:https://my.oschina.net/wangdk/blog/165630

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值