• 异步网络请求


    #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
  • 相关阅读:
    Max History CodeForces
    Buy a Ticket CodeForces
    AC日记——字符串的展开 openjudge 1.7 35
    AC日记——回文子串 openjudge 1.7 34
    AC日记——判断字符串是否为回文 openjudge 1.7 33
    AC日记——行程长度编码 openjudge 1.7 32
    AC日记——字符串P型编码 openjudge 1.7 31
    AC日记——字符环 openjudge 1.7 30
    AC日记——ISBN号码 openjudge 1.7 29
    AC日记——单词倒排 1.7 28
  • 原文地址:https://www.cnblogs.com/lantu1989/p/5446429.html
Copyright © 2020-2023  润新知