- NSURLSessionConfiguration 對象可以保存公共設置,最好將該對象放入一個單例對象或者上下文環境中,使其全局可見
//創建默認配置對象
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
//設置請求頭。
//config.HTTPAdditionalHeaders = @{@"apiKey":@"nil"};
//還可以設置無痕配置,以及后臺運行的配置等等??梢愿鶕约盒枨笈渲?//配置設置完成后用配置對象創建會話對象,此處的委托可以通過回調其協議里的方法處理響應的事件(發生錯誤,后臺傳輸完成,身份驗證等)。
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
//1.通過字符串(網址)創建統一資源定位符
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com";
//2.用統一資源富創建網絡請求
NSRequest *req = [NSRequest requestWithURL:url cachePolicy:0 timeOutInterval:5];
//3.用會話對象的單例模式創建網絡請求會話
NSURLSession *session = [NSURLSession sharedSession];
//4.通過會話創建一個獲得數據的任務
NSURLSessionDataTask *task = [session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];
for (NSDictionary *albumDict in dict[@"albums"]) {
//通過YYModel將字典裝成模型對象
LHModel *model =[LHModel yy_modelWithDictionary:albumDict];
[dataArray addObject:model];
}
//模型對象準備就緒后刷新表格視圖
//蘋果官方規定:刷新界面的代碼要再主線程中執行
//否則界面可能無法刷新 因此下面的代碼要回到主線程執行
//寫法一: GCD 異步派發(將代碼發配到主線程中執行)
//dispatch_async(dispatch_get_main_queue(), ^{
// [myTableView reloadData];
//});
//寫法二:NSOperation和NSOperationQueue 操作隊列
//創建一個操作對象封裝要執行的代碼
NSOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[myTableView reloadData];
}];
//將操作放到主隊列(主隊列中的操作在主線程中執行)中執行
[[NSOperationQueue mainQueue] addOperation:op];
}
else{
NSLog(@"error = %@",error);
}
}];
//將任務掛起、暫停、取消(suspend cancel);
[task resume];
- 網絡中常用的對字符串操作的方法
- 有時統一資源定位符可能會出現中文參數需將中文字符轉換為百分號編碼的字符
[NSString stringWithByAddingPrecentEscapesUsingEncoding:NSUTF8StringEncoding];
- 在輸入密碼、賬號等操作時可能需要去掉字符串兩邊的空格字符
[NSString stringByTrimmingCharacterInset:[NSCharacterInset whitespaceCharacterInset]];
- 追加、重組、截取等就不在此一一舉例了
- 單例的創建以及用單例保存全局變量
- 1.廢除原有的初始化方法。
-(instancetype) init {
@throw [NSException exceptionWithName:@"" reason:@"不能調用init方法初始化CDUserManager對象" userInfo:nil];
}
//str 為需要放入單例中的變量。
-(instancetype) initPrivate {
if (self = [super init]) {
_str = [NSString string];
}
return self;
}
- 2.用私有的初始化方式創建對象
+(instancetype) sharedUser {
static LHSharedUser *user = nil;
@synchronized (self) {
if (!user) {
user = [[self alloc] initPrivate];
}
}
return user;
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。