iphone平台http get请求

iphone平台http get请求,第1张

概述直接贴源码: HttpGetRequestAppDelegate.h: [plain]  view plain copy //   //  HttpGetRequestAppDelegate.h   //  HttpGetRequest   //   //  Created by apple on 12-5-25.   //  Copyright 2012年 __MyCompanyName__. 

直接贴源码:

httpGetRequestAppDelegate.h:


[plain]  view plain copy //   //  httpGetRequestAppDelegate.h   //  httpGetRequest   //   //  Created by apple on 12-5-25.   //  copyright 2012年 __MyCompanyname__. All rights reserved.   //      #import <UIKit/UIKit.h>   @class httpGetRequestVIEwController;   @interface httpGetRequestAppDelegate : NSObject <UIApplicationDelegate>   @property (nonatomic, retain) IBOutlet UIWindow *window;   @end  


httpGetRequestAppDelegate.m:


copy <span >   </span><pre name="code" >//   //  httpGetRequestAppDelegate.m   //  httpGetRequest   //  Created by apple on 12-5-25.   //  copyright 2012年 __MyCompanyname__. All rights reserved.      #import "httpGetRequestAppDelegate.h"   #import "httpGetRequestVIEwController.h"   @implementation httpGetRequestAppDelegate   @synthesize window = _window;   @synthesize vIEwController = _vIEwController;   - (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary *)launchOptions   {       // OverrIDe point for customization after application launch.               self.window.rootVIEwController = self.vIEwController;       [self.window makeKeyAndVisible];       return YES;   }   - (voID)applicationWillResignActive:(UIApplication *)application   {       /*        Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the Transition to the background state.        Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.        */   - (voID)applicationDIDEnterBackground:(UIApplication *)application        Use this method to release shared resources, save user data, invalIDate timers, and store enough application state information to restore your application to its current state in case it is terminated later.         If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.   - (voID)applicationWillEnterForeground:(UIApplication *)application        Called as part of the Transition from the background to the inactive state; here you can undo many of the changes made on entering the background.        */   }   - (voID)applicationDIDBecomeActive:(UIApplication *)application       /*        Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was prevIoUsly in the background, optionally refresh the user interface.   - (voID)applicationWillTerminate:(UIApplication *)application        Called when the application is about to terminate.        Save data if appropriate.        See also applicationDIDEnterBackground:.   - (voID)dealloc       [_window release];       [_vIEwController release];       [super dealloc];   @end  

 

 

httpGetRequestVIEwController.h

copy //  httpGetRequestVIEwController.h   @interface httpGetRequestVIEwController : UIVIEwController       //UIbutton *button;       UITextFIEld *textVIEw;       NSMutableData *receiveData;   //@property (nonatomic,retain) IBOutlet UIbutton *button;   @property (nonatomic,retain) NSMutableData *receiveData;   - (IBAction)buttonpressed:(ID)sender;   - (voID) sendRequestByGet:(Nsstring*)urlString;   - (voID)connection:(NSURLConnection *)connection dIDReceiveResponse:(NSURLResponse *)response;   - (voID)connection:(NSURLConnection *)connection dIDReceiveData:(NSData *)data;   - (voID)connection:(NSURLConnection *)connection dIDFailWithError:(NSError *)error;   - (voID)connectionDIDFinishLoading:(NSURLConnection *)connection;   @end  
httpGetRequestVIEwController.m

copy //  httpGetRequestVIEwController.m   #import "httpGetRequestVIEwController.h"   @implementation httpGetRequestVIEwController   //@synthesize button;   @synthesize textVIEw;   @synthesize receiveData;   - (voID)dIDReceiveMemoryWarning       // Releases the vIEw if it doesn't have a supervIEw.       [super dIDReceiveMemoryWarning];              // Release any cached data, images, etc that aren't in use.   #pragma mark - VIEw lifecycle   /*   // Implement vIEwDIDLoad to do additional setup after loading the vIEw, typically from a nib.   - (voID)vIEwDIDLoad       [super vIEwDIDLoad];   */   - (voID)vIEwDIDUnload       [super vIEwDIDUnload];       // Release any retained subvIEws of the main vIEw.       // e.g. self.myOutlet = nil;       self.textVIEw = nil;       self.receiveData = nil;   - (BOol)shouldautorotatetoInterfaceOrIEntation:(UIInterfaceOrIEntation)interfaceOrIEntation       // Return YES for supported orIEntations       return (interfaceOrIEntation == UIInterfaceOrIEntationPortrait);   - (IBAction)buttonpressed:(ID)sender       Nsstring *value = [Nsstring stringWithFormat:@"%@",textVIEw.text];       NSLog(@"URL:%@",value);              [self sendRequestByGet:value];       //[value release];   //http get implement   - (voID) sendRequestByGet:(Nsstring*)urlString       NSURL *url = [NSURL URLWithString:urlString];       NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];       [request sethttpMethod:@"GET"];       NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];       [request release];       [conn release];   - (voID)connection:(NSURLConnection *)connection dIDReceiveResponse:(NSURLResponse *)response       self.receiveData = nil       self.receiveData = [NSMutableData data]; //auto release?   - (voID)connection:(NSURLConnection *)connection dIDReceiveData:(NSData *)data       [self.receiveData appendData:data];   - (voID)connection:(NSURLConnection *)connection dIDFailWithError:(NSError *)error       NSLog(@"error=%@",[error localizedDescription]);   - (voID)connectionDIDFinishLoading:(NSURLConnection *)connection       Nsstring *result = [[Nsstring alloc] initWithBytes:[receiveData bytes] length:[receiveData length] enCoding:NSUTF8StringEnCoding];       NSLog(@"result=%@",result);       [result release];   @end   @H_502_593@

需要注意的是httpGetRequestVIEwController 拥有NSMutableData *receiveData;这个成员。receiveDate是在:

(voID)connection:(NSURLConnection *)connection dIDReceiveResponse:(NSURLResponse *)response

方法中通过self.receiveData = [NSMutableData data];获得的。因为不是通过alloc、new或copy创建的。所以receiveData是一个自动释放的对象。所以如果我想在当前事件循环结束后仍能用receiveData需要设置@property (nonatomic,retain) NSMutableData *receiveData;这样就可以在dIDReceiveResponse方法中通过self.receiveData = [NSMutableData data];使receiveData引用计数为2.

  但是存在的问题是: cocoa在程序开始处理事件之前创建了一个自动释放池。并在事件结束后销毁该自动释放池。当前事件循环结束或自动释放池被销毁是,receiveData会收到一条release消息。使receiveData引用计算为1.不执行销毁。下一次触发buttonpressed时,又会调用dIDReceiveResponse方法,receiveData又将获取到空对象。但是前一次receiveData里的内容并没有随着上一个自动释放池的回收而消失,这或许就是一个内存溢出吧。所以我在dIDReceiveResponse方法中增加:self.receiveData = nil;

总结

以上是内存溢出为你收集整理的iphone平台http get请求全部内容,希望文章能够帮你解决iphone平台http get请求所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058469.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存