zoukankan      html  css  js  c++  java
  • 异步网络请求

    #import <UIKit/UIKit.h>
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    
    @end
    #import "AppDelegate.h"
    #import "RootViewController.h"
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        
        self.window.rootViewController = [[RootViewController alloc] init];
        
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    @end
    #import <UIKit/UIKit.h>
    
    @interface RootViewController : UIViewController
    
    
    @end
    #import "RootViewController.h"
    #import "LFRequestData.h"
    @interface RootViewController ()<NSURLConnectionDataDelegate,LFRequestDataDelegate>//导入代理
    {
        NSMutableData *newsData;//存放数据
    }
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        LFRequestData *requestData = [[LFRequestData alloc] initWithURLString:@"http://c.m.163.com/nc/article/list/T1370583240249/0-20.html"];
        //确定代理
        requestData.delegate = self;
    }
    
    #pragma mark -- LFRequestDataDelegate --
    - (void)revieceData:(NSMutableData *)data{
    //    NSLog(@"接受到数据了:%@",data);
        
        //解析
        NSDictionary *news = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",news);
    }
    
    @end
    #import <Foundation/Foundation.h>
    
    @protocol LFRequestDataDelegate ; //协议的申明
    @interface LFRequestData : NSObject
    
    @property (nonatomic , weak) id<LFRequestDataDelegate> delegate;//设置代理
    @property (nonatomic , strong) NSMutableData *newsData;//存放数据 
    
    /**
     *  初始化的方法
     *
     *  @param URLString 网址
     */
    - (LFRequestData*)initWithURLString:(NSString*)URLString;
    
    @end
    
    /**
     *  代理传值
     */
    @protocol LFRequestDataDelegate <NSObject>
    
    - (void)revieceData:(NSMutableData*)data;
    
    @end
    #import "LFRequestData.h"
    
    @interface LFRequestData ()<NSURLConnectionDataDelegate>//导入代理
    {
        NSString *URLStr;
    }
    @end
    
    @implementation LFRequestData
    
    - (LFRequestData*)initWithURLString:(NSString*)URLString{
        //如果URLString则返回空
        if (URLString.length == 0) {
            return nil;
        }
        URLStr = URLString;
        return [self init];
    }
    
    -(instancetype)init{
        self = [super init];
        if (self) {
            //1.创建URL
            NSURL *url = [[NSURL alloc] initWithString:URLStr];
            //2.通过URL创建网络请求
            NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
            //3.创建链接
            NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
            NSLog(@"connection:%@",connection);
        }
        return self;
    }
    
    /**
     *  服务器响应的时候自动执行
     */
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
        NSHTTPURLResponse *HTTPResopnse = (NSHTTPURLResponse *)response;
        NSLog(@"code:%ld",(long)HTTPResopnse.statusCode);
        //如果状态码是200,则响应服务器了
        if (HTTPResopnse.statusCode == 200) {
            //初始化newsData
            self.newsData = [[NSMutableData alloc] init];
        }
    }
    
    /**
     *  如果有新的数据到来,此方法自动执行
     */
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
        //追加新数据
        [self.newsData appendData:data];
    }
    
    /**
     *  请求完成后,自动执行的方法
     */
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    //    NSLog(@"%@",self.newsData);
        //如果能响应代理的方法,则执行代理的方法
        if ([_delegate respondsToSelector:@selector(revieceData:)]) {
            [self.delegate revieceData:self.newsData];
        }
    }
    
    /**
     *  请求失败时自动执行
     */
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
        NSLog(@"error:%@",[error localizedFailureReason]);
    }
    
    @end
  • 相关阅读:
    jquery实现表格文本框淡入更改值后淡出
    硬件抽象层
    第八章读书笔记
    Linux驱动——LED闪烁
    编写Linux驱动与统计单词个数
    在开发板上安装Android
    源代码的下载和编译
    初学Git随笔
    Ubuntu Linux环境下的Android开发环境的配置
    Android系统移植于驱动开发概述
  • 原文地址:https://www.cnblogs.com/lantu1989/p/5446429.html
Copyright © 2011-2022 走看看