iOS 高阶
1.UIStoryBoard
2. segue跳转传值
3. UIColor配色
//1. 十进制配色
[UIColor colorWithRed:163.0/255.0 green:148.0/255.0 blue:128.0/255.0 alpha:1.0];
//2. 设置16进制颜色(同上)
[UIColor colorWithRed:0xba/255.0 green:0x21/255.0 blue:0xd5/255.0 alpha:1.0];
4. XML解析
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,copy) NSString *pid;
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *sex;
@property(nonatomic,copy) NSString *age;
@end
#import <Foundation/Foundation.h>
#import "Person.h"
@interface XMLUtil : NSObject<NSXMLParserDelegate>
@property(nonatomic,strong) NSXMLParser *par;
@property(nonatomic,strong) Person *person;
//存放每个person
@property(nonatomic,strong) NSMutableArray *list;
//标记当前标签,以索引找到XML文件的内容
@property(nonatomic,copy) NSString *currentElement;
//声明parse方法,通过它实现解析
-(void)parse;
@end
@implementation XMLUtil
-(instancetype)init {
self = [super init];
if (self) {
//获取事先准备好的XML文件
NSBundle *b = [NSBundle mainBundle];
NSString *path = [b pathForResource:@"test" ofType:@".xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
self.par = [[NSXMLParser alloc] initWithData:data];
//添加代理
self.par.delegate = self;
//初始化数组,存放解析后的数据
self.list = [NSMutableArray arrayWithCapacity:5];
}
return self;
}
//几个代理方法的实现,是按逻辑上的顺序排列的,但实际调用过程中中间三个可能因为循环等问题乱掉顺序
//(1).开始解析
-(void)parseDiaStartCocument:(NSXMLParser *)parser {
NSLog(@"parserDidStartDocument...");
}
//(2).准备节点
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict {
self.currentElement = elementName;
if ([self.currentElement isEqualToString:@"student"]) {
self.person = [[Person alloc] init];
}
}
//(3). 获取节点内容
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([self.currentElement isEqualToString:@"pid"]) {
[self.person setPid:string];
}else if ([self.currentElement isEqualToString:@"name"]) {
[self.person setName:string];
}else if ([self.currentElement isEqualToString:@"sex"]) {
[self.person setSex:string];
}else if ([self.currentElement isEqualToString:@"age"]) {
[self.person setAge:string];
}
}
//(4). 解析完一个节点
-(void)parseDidEndDocument:(NSXMLParser *)parser {
NSLog(@"parserDidEndDocument...");
}
//外部调用借口
-(void)parse {
[self.par parse];
}
@end
5. JSON解析
//1. Json数据封包
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
//isValidJSONSerialization判断对象是否可以构建成json对象
if ([NSJSONSerialization isValidJSONObject:dic]) {
NSError *error;
//创建一个json从Data,NSJSONWritingPrettyPrinted指定的JSON数据产的空白,使输出更具可读性
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error];
NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"json data:%@",json);
}
//2. Json数据解析
NSError *error;
//加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/data/101120101.html"]];
//将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//IOS自带解析类NSJSONSerialization从response中解析出数据放到字典中 - crash here - TBD
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];
// NSDictionary *text = [NSString stringWithFormat:@"今天是%@ %@ %@ 的天气状况是:%@ %@",
// [weatherInfo objectForKey:@"day_y"],
// [weatherInfo objectForKey:@"week"],
// [weatherInfo objectForKey:@"city"],
// [weatherInfo objectForKey:@"weather1"],
// [weatherInfo objectForKey:@"temp1"]];
NSDictionary *text = [NSString stringWithFormat:@"今天是 %@ %@ %@ 的天气状况是: %@ %@",[weatherInfo objectForKey:@"day_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"],[weatherInfo objectForKey:@"weather1"],[weatherInfo objectForKey:@"temp1"]
];
NSLog(@"weatherInfo: %@",text);
6. 多线程
//// 1.NSThread - 苹果封装后,并且完全面向对象
// //(1). 先创建线程类,在启动
// //创建
// NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:nil];
//
// //启动
// [thread start];
//
// //(2). 创建并启动
// [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:nil];
//2. GCD - 苹果为多核的并行运算提出的解决方案
//在GCD中,加入了2个非常重要的概念:任务和队列.
//队列:分串行和并行2种
//(1). 主队列:用于刷新UI
//创建
// dispatch_queue_t queue = dispatch_get_main_queue();
//(2).自己创建的队列:用于耗时渐咋
//串行队列
// dispatch_queue_t queue = dispatch_queue_create("tk.bourne.testQueue", NULL);
//并行队列
// dispatch_queue_t queue = dispatch_queue_create("tk.courne.testQueue", DISPATCH_QUEUE_SERIAL);
//(3). 全局并行队列:只要是并行队列任务一般都加入到这个队列,这是系统提供的一个并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_SERIAL, 0);
//任务:分同步和异步两种
//(1).同步任务:不会另开线程,会阻塞当前线程
dispatch_sync(queue, ^{
//code here
});
//(2).异步任务:会另开线程,不会阻塞当前线程
dispatch_sync(queue, ^{
//code here
});
//3. NSOperation和NSOperationQueue
/*
对GCD的封装,完全面向对象,NSOperation和NSOperationQueue分别对应GCD的任务和队列。
操作步骤: 1. 将要执行的任务封装到一个NSOperation对象中.
2. 将此任务添加到一个NSOperationQueue对象中.
注意:NSOperation只是一个抽象类,所以不能封装任务。但它有2个子类用于封装任务。
分别是:NSInvocationOperation 和 NSBlockOperation。创建一个Operation后,
需要调用start方法来启动任务,它会默认在当前队列同步执行。当然可以在中途取消一个任务,
只需要调用起cancel方法即可.
*/
//NSInvocationOperation:需要传入一个方法名
//1.创建NSInvocation对象
// NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];
//
// //2.开始执行
// [operation start];
//1.创建NSBlockOperation对象
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
}];
//可以添加多个block
for (NSInteger i = 0; i < 5; i ++ ) {
[operation addExecutionBlock:^{
NSLog(@"第%ld次: %@",i,[NSThread currentThread]);
}];
}
//2.开始执行
[operation start];
7.动画效果
8. NSUserDefaults
//.简介
/*
NSUserDefaults是一个单例
他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提,
也是大家喜欢用它保存简单数据的一个主要原因.
*/
//1. NSUserDefaults
// NSUserDefaults支持的数据类型有: NSNumber(NSInteger、float、double),NSString、NSDate、NSArray、NSDictionary、BOOL;
//将NSString对象存储到NSUserDefaults中
// NSString *passWord = @"123456";
// NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
// [user setObject:passWord forKey:@"userPassWord"];
//将数据取出来
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSString *passWord = [user objectForKey:@"userPassWord"];
//2.NSUserDefaults存储对象
//NSUserDafaults本身不支持自定义对象的存储,不过它支持NSData的类型,所以可以选择使用归档,将自定义对象转为NSData类型后存入NSUserDefaults.
//(1).将Student类的数据归档
//(2).将Student对象存入NSUserDefaults
Student *student = [[Student alloc] int];
student.name = @"ladyO";
student.sex = @"女";
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:data forKey:@"oneStudent"];
//(3).从NSUserDefaults取出Student对象
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSData *data = [user objectForKey:@"oncStudent"];
Student *student = [NSKeyedArchiver unarchiveObjectWithData:data];
9. 网络请求
iOS 高阶的更多相关文章
- swift 的高阶函数的使用代码
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- 迈向高阶:优秀Android程序员必知必会的网络基础
1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用 ...
- c#语言-高阶函数
介绍 如果说函数是程序中的基本模块,代码段,那高阶函数就是函数的高阶(级)版本,其基本定义如下: 函数自身接受一个或多个函数作为输入. 函数自身能输出一个函数,即函数生产函数. 满足其中一个条件就可以 ...
- JavaScript高阶函数
所谓高阶函数(higher-order function) 就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数. 下面的例子接收两个函数f()和g(),并返回一个新的函数用以计算f(g ...
- 分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习. 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力: 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大 ...
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- python学习道路(day4note)(函数,形参实参位置参数匿名参数,匿名函数,高阶函数,镶嵌函数)
1.函数 2种编程方法 关键词面向对象:华山派 --->> 类----->class面向过程:少林派 -->> 过程--->def 函数式编程:逍遥派 --> ...
- Scala的函数,高阶函数,隐式转换
1.介绍 2.函数值复制给变量 3.案例 在前面的博客中,可以看到这个案例,关于函数的讲解的位置,缺省. 4.简单的匿名函数 5.将函数做为参数传递给另一个函数 6.函数作为输出值 7.类型推断 8. ...
- Python之路 day3 高阶函数
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 变量可以指向函数,函数的参数能接收变量, 那么 ...
随机推荐
- SAP MRP的计算步骤
SAP MRP的计算步骤,物料需求计划(简称为MRP)与主生产计划一样属于ERP计划管理体系,它主要解决企业生产中的物料需求与供给之间的关系,即无论是对独立需求的物料,还是相关需求的物料, ...
- 第七届ACM趣味程序设计竞赛第四场(正式赛) 题解
Final Pan's prime numbers 题目连接: http://acm.uestc.edu.cn/#/problem/show/1272 题意 给你n,要求你在[4,n]范围内找到一个最 ...
- CustomProgressBar
https://github.com/eltld/CustomProgressBar-master
- iOS开发——多线程OC篇&(十)多线程NSOperation基本使用
NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. (3)最⼤大并发数的 ...
- iOS开发——动画编程Swift篇&(一)UIView基本动画
UIView基本动画 // MARK: - UIView动画 ------------------------------------- // MARK: - UIView动画-淡入 @IBActio ...
- qt creator中使用qwt插件
前提:我用mingw编译的qwt. 将qwt插件集成到qt designer非常easy.仅仅要把qwt编译的qwt_designer_plugin.dll复制到C:\Qt\Qt5.3.1\5.3\m ...
- Ubuntu15.04 安装Android开发环境
一.安装Java SE JKD A.下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSite ...
- c#读写ini配置文件示例
虽然c#里都是添加app.config 并且访问也很方便 ,有时候还是不习惯用他.那么我们来做个仿C++下的那种ini配置文件读写吧 其他人写的都是调用非托管kernel32.dll.我也用过 ...
- 从零开始学JAVA(01)-JAVA开发环境安装
写在前面: 本人没有JAVA基础(包括语法.开发环境),未使用开发工具开发过程序,如果有不对或误导的地方,欢迎指正. 本系列所有文章使用Eclipse,JDK是Version 7 Update 51, ...
- CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
1514: Packs Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 61 Solved: 4[Submit][Status][Web Board] ...