IOS 学习笔记(NSURLConnection, Singleton)PART 12
[caption id=”” align=”alignnone” width=”302”] 请大老王给我来个这个[/caption]
老婆孩子生病只能干瞪眼着急,
办公室闷热难耐盼凉风习习,
二傻子老板得空就追着你,
草包策划们见天扯闲皮,
也想过放弃或者逃离,
走在北京的春天里,
一半汗水一半泥,
大马文章为敌,
且行且珍惜,
三十二了,
想升级,
憋气,
迷。
迷?
提气!
再一级!
测试过了,
越学越牛逼,
争取天下无敌,
点点知识和才艺,
序列化装进脑袋里,
再难也应该不弃不离,
需知人靠脸面树靠活皮,
说不定哪天机会就找到你,
所以抓紧一切时间努力学习,
老婆说我和儿子支持你别着急。
NSURLConnection发送请求和加载图片
用NSData加载远程文件会占用主进程,导致整个界面卡死,这是我不能容忍的,我想Cocoa Touch一定有异步的加载办法,这样我就能在屏幕中央显示一个小菊花,让用户知道程序不是嗝屁了。这个办法就是NSURLConnection,发送一个Get http request方式如下:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; [NSURLConnection connectionWithRequest:request delegate:self];
实现NSURLConnectionDataDelegate,并实现对应的方法:
@interface MyViewController () <NSURLConnectionDataDelegate> @end - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [self.receivedData appendData:data]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ //handle error } - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ //load complete do something with your receivedData }
需要注意的是,didReceiveData收到的并非完整的Data,而是部分Data,要存储这些阶段数据,可以定义一个NSMutableData对象,并在发起请求之前重新初始化这个NSMutableData,同时在didReceiveData时,将数据附加到数据对象上。
同样的加载过程可以应用在加载图片上。由于得到的都是NSData,区别就在于结果的处理上了。
UIActivityIndicatorView
这就是那个小菊花了,用于缓解用户的焦虑(或者让用户更焦虑)。使用方式如下:
self.loadingIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; CGPoint center = CGPointMake([[UIScreen mainScreen] bounds].size.width/2,[[UIScreen mainScreen] bounds].size.height/2); [self.loadingIndicator setCenter:center]; [self.view addSubview:self.loadingIndicator];
这时它还没有被显示出来,这样显示:
[self.loadingIndicator startAnimating];
这样隐藏:
[self.loadingIndicator stopAnimating];
Singleton
OC里实现单例是这样的:
#import <Foundation/Foundation.h> @interface AppDataShare : NSObject @property(nonatomic,strong)NSString *userName; + (id)sharedData; @end
#import "AppDataShare.h" @implementation AppDataShare + (id)sharedData { static AppDataShare *shareData = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ shareData = [[self alloc] init]; }); return shareData; } - (id)init { if (self = [super init]) { } return self; } @end
实测自定义数据也没问题,非ARC想实现可以参考这里
字符串拆分,替换特定字符,去除空格和换行
字符串操作的方法名字都好长啊!
根据特定字符拆分:
NSString *str = @“a_b_c”;
[str componentsSeparatedByString:@“_”];
替换指定字符:
[str stringByReplacingOccurrencesOfString:@“_” withString:@””];
去除空格和换行:
[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];