实现重点: NSURLSessionDataTask要设置请求头,从路径中获取文件已经下载的长度(文件没有下载过的话,长度为0).通过这个长度设置请求的Range 如图: 接收到请求的时候key:文件名(经过MD5加密过的URL,Url保证了文件名的唯一) Value:该文件已经下载过的长度.保存成plist文件,方便对下载文件的判断 利用NSOutUpStream写文件 在任务完成的代理方法里面,NSOutUpStream关闭并且清空,对应的task清空,对应的session清空 代码如下:…
一.xib文件构成 二.自定义控件类(xib文件与自定义控件类的文件名字相同,并且将xib文件中父类控件的类名改成自定义控件类的名称) ***********自定义控件类需要的属性************* #import <UIKit/UIKit.h> @interface ChaosPageView : UIView /** 图片数据 */ @property(nonatomic,strong) NSArray *images; /** pageControl的当前页圆点颜色 */ @pr…
一.Xib和storyboard对比 *共同点: 1>都用来描述软件界面 2>都用Interface Builder工具来编辑 3>本质都是转换成代码去创建控件 *不同点 1>Xib是轻量级的,用来描述局部的UI界面 2>storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系 二.Xib的加载方法 方法1: NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名…
一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如果要变动数据,直接修改数据文件即可,不用修改代码 3>一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也成为“plist文件” 二.创建plist文件 三.解析plist文件 代码实…
一.非cocoaPods方法,需要注意的是:直接将SSZipArchive拖入项目编译会报错. Undefined symbols for architecture x86_64: "_crc32", referenced from: _unzReadCurrentFile in unzip.o _zipWriteInFileInZip in zip.o "_deflate", referenced from: _zipWriteInFileInZip in zip…
一.NSURLSession.NSURLSessionTask的使用步骤 首先创建NSURLSession对象 通过NSURLSession对象创建对应的任务 <1>NSURLSessionDataTask的GET和POST  -- 以及url中包含了中文的解决办法 <2>NSURLSessionDownloadTask实现小文件的下载 <3>NSURLSessionDownloadTask实现大文件的断点下载 -- 暂时没有实现退出程序后的文件续传 #import &…
一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码) 三.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题(存钱取钱的例子,多个售票员卖票的例子) 安全隐患解决的方法 --- 互斥锁(图解)…
iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core Data--这里暂且不讲 一.应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示 二.应用沙盒结构分析 应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件 Do…
一.AFNETWorking简单使用 get请求 get请求,以后经常用NSURLSession底层的写的部分 简单的post请求 用post请求下载文件,方法很多,还可以通过upload任务来执行 download任务 二.框架中的数据解析,默认是将数据按照json来解析,设置方法 三.AFN框架监控联网状态…
XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; // 设置代理 parser.delegate = self; // 开始解析XML(parse方法是阻塞式的) [parser parse]; 代理对象要遵守NSXMLParserDelegat…
JSON数据(NSData) -> OC对照表 {} -> NSDictionary @{} [] -> NSArray @[] "jack" -> NSString @"jack" 10 -> NSNumber @10 10.5 -> NSNumber @10.5 true -> NSNumber @1 false -> NSNumber @0 null -> NSNull JSON数据(NSData) -&g…
HTTP请求的常见方法 GET 所有参数拼接在URL后面,并且参数之间用&隔开 比如http://520it.com?name=123&pwd=345 传递了2个参数给服务器 name参数:123 pwd参数:345 没有请求体 一般用来查询数据 POST 所有参数都放在请求体中 一般用来修改.增加.删除数据 创建HTTP请求 GET // 请求路径 NSString *urlString = @"http://520it.com?name=张三&pwd=123"…
一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS中发送Http请求的方案 Http请求过程 -- 请求 Http请求过程 -- 响应…
一.自己实现多图片下载应该注意的问题 沙盒缓存的问题 程序缓存的问题 cell重复利用显示图片混乱的问题 -- 用户拖拽快,下载图片慢导致的 解决图片混乱引入NSOperation集合的问题 资源下载失败的问题(练习中没有出现过,但是一定要考虑) #import "ChaosViewController.h" #import "ChaosApp.h" @interface ChaosViewController () /** 模型集合 */ @property(no…
一.ARC中实现单粒模式 在.m 保留一个全局的static的实例 static id _名称; 重写allocWithZone:方法,在这里创建唯一的实例 提供一个类方法让外界访问唯一的实例 实现copyWithZone:方法 -- 方法中直接返回static修饰的全局变量,copy是对象方法,所以调用copy就说明已经有了单例对象 二.单粒模式 宏 的定义 定义一个.h文件就搞定 单粒模式使用 // .h文件 宏中的## 用来转译 #define XMGSingletonH(name) +…
一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数   GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 <2>GCD的使用 GCD的使用就2个步骤 定制任务 确定想做的事情…
一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘制,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示 UIView本身不具备显示的功能,是他内部的层才有显示功能 二.CALayer的基本使用 三.关于CALa…
iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer(敲击) UILongPressGestureRecognizer(长按) UISwipeGestureRecognizer(轻扫) UIRotationGesture…
一.用户在使用APP的过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: 二.响应者对象 在iOS中只有继承了了UIResponder的对象才能接受并处理事件,这样的对象称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此他们都是响应者对象,都能够接受并处理事件 UIResponder内部提供了以下方法来处理事件 三.练习中对UIView的触摸事件进行了熟悉 四.UITouch 一根手指对应一个UITou…
图片拉伸方法一: IOS 5.0以后才有的方法: - (void)viewDidLoad { [super viewDidLoad]; UIImageView *imageView = [[UIImageView alloc] init]; imageView.frame = CGRectMake(, , , ); UIImage *image = [UIImage imageNamed:@"chat_send_press_pic"]; // IOS5.0 传入的是需要保护的区域,其余…
一.使用xib或者storyboard自定义非等高的cell实现方式差不多,这里简单介绍一下通过xib文件实现的方法 <1.1>创建一个继承自UITableViewCell的子类,比如ChaosWeiboCell <1.2>在模型中增加一个cellHeight属性,用来存放对应的cell的高度 #import <UIKit/UIKit.h> // 这里修改成UIKit框架 @interface ChaosWeibo : NSObject // 模型类 /** 正文 */…
一.storyboard自定义cell <1>创建一个继承自UITableViewCell的子类,比如ChaosDealCell <2>在storyboard中 <2.1>往cell里面增加需要用到的子控件 <2.2>设置cell的重用标识 <2.3>设置cell的class为ChaosDealCell <3>在控制器中 <3.1>利用重用标识找到cell并且给cell传递模型数据 <4>在ChaosDealC…
使用代码实现Autolayout的方法1- 创建约束 +(id)constraintWithItem:(id)view1attribute:(NSLayoutAttribute)attr1relatedBy:(NSLayoutRelation)relationtoItem:(id)view2attribute:(NSLayoutAttribute)attr2multiplier:(CGFloat)multiplierconstant:(CGFloat)c;* view1 :要约束的控件* att…
九宫格计算思路 利用控件的索引index计算出控件所在的行号和列号 利用列号计算控件的x值 利用行号计算控件的y值 HUD 其他说法:指示器.遮盖.蒙板 半透明HUD的做法 背景色设置为半透明颜色 定时任务 方法1:performSelector objc // 1.5s后自动调用self的hideHUD方法 [self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5]; - 方法2:GCD objc dispat…
更换源 Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/)源来查找.安装.升级和写在软件包 gem sources --remove https://rubygems.org/ gem sources -a https://gems.ruby-china.org/ `https://ruby.taobao.org/ 貌似不能用了` gem sources -l 更新升级gem sudo gem update --system 安装 s…
一.NSOperation NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加到NSOperationQueue中 系统会自动将NSOperationQueue中的NSOperation取出来 将取出的NSOperation封装的操作放到一条新线程中执行 NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类 使用NSOperation子类的方式有3种 N…
一.导航控制器的子类 作为导航控制器的子类,并且是导航控制器子类中的第一个,系统会默认给子控件添加EdgeInsert属性,把导航栏的宽度挤出来.但是系统只会默认修改第一个. 解决办法1:系统帮忙给第一个子控件添加了EdgeInsert,之后的子控件可以自己添加. 解决办法2:将系统默认的操作取消 --  // 自动调整scrollView的inserts Adjust--调整的意思 self.automaticallyAdjustsScrollViewInsets = NO; 解决办法3: 二…
一.方法1:如图,图中的两个tableView分别交给两个控制器来管理 重点难点:categoryTableView被点击之后,subcategoryTableView要取得相应的数据进行刷新,所以subcategoryTableView要成为categoryTableView的代理. 在categoryTableView中cell被点击后判断代理是否实现,将数据集合传递给subcategoryTableView subcategoryTableView实现的代理方法中,接收数据,刷新表格 二.…