摘要:一:访客界面效果如图 二:xib封装访客视图的view 1:业务逻辑分析:1:由于用户未登录时要显示访客视图,要先进行判断用户是否登录,未登录则显示访客视图,登录则显示正常的登陆界面,由于要在四个子控制器界面的控制器中都要判断是否显示访客视图,同样的逻辑,所以考虑抽成父类,把判断是否显示访客视图的逻
阅读全文
摘要:一:StoryBoard Reference的介绍 StoryBoard Reference是Xcode7,iOS9出现的新功能 目的是让我们可以更好的使用storyboard来开发项目 在之前的开发中,如果使用一个storyboard开发,那么非常容易造成代码冲突 可以通过使用storyboard
阅读全文
摘要:一:Appdelegate 二:RHTabBarViewController 三:异常处理
阅读全文
摘要:一:先配置环境:自定义Log输出(DEBUG 和 release模式),并屏蔽后台多余的打印信息 1:屏蔽后台多余的打印信息:如果写了OS_ACTIVITY_MODE = disable 还是不行.把对号重新勾选就可以了. 2:自定义log输出:1:先配置标记: —>buildSettings—>搜
阅读全文
摘要:初始化项目 项目的部署版本 之后项目会运行在哪些系统中 横竖屏的支持 iPhone应用一般只支持横屏 iPhone游戏一般支持竖屏 iPad横竖屏都支持 设置项目的图标和启动图片 项目的图标(美工做好) 项目的启动图片(美工做好) 修改项目的名称 Bundle Display Name 项目的目录结
阅读全文
摘要:一:项目部署 项目部署 一.开源中国(OSChina) 网站地址:https://git.oschina.net/ 开源中国社区成立于2008年8月,其目的是为中国的IT技术人员提供一个全面的、快捷更新的用来检索开源软件以及交流使用开源经验的平台 目前国内有很多公司会将公司的项目部署在 OSChin
阅读全文
摘要:一:设置登录界面和注册界面的切换 总结:1:设置登陆按钮的圆角效果:1:直接设置按钮的layer,若是表格视图,不建议通过layer设置圆角效果,会很耗性能,最好是通过绘图的方式设置圆角效果 2:利用kvc也可以设置圆角效果,kvc一般都是为属性赋值,setValue forKey直接为属性赋值,s
阅读全文
摘要:import UIKit /* 总结:1:let file = (#file as NSString).lastPathComponent,#file获取的是打印所在的文件 的全路径,转成NSString才能调用lastPathComponent获取的是路径最后的.后面的元素,as NSString转成NSString类型 2:let funcName = #func...
阅读全文
摘要:懒加载 懒加载的介绍 swift中也有懒加载的方式 (苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同的是swift有专门的关键字来实现懒加载 lazy关键字可以用于定义某一个属性懒加载 懒加载的使用 格式 lazy var 变量: 类型 = { 创建变量代码 }() 懒加载的
阅读全文
摘要:闭包 闭包的介绍 闭包和OC中的block非常相似 OC中的block是匿名的函数 Swift中的闭包是一个特殊的函数 block和闭包都经常用于回调 注意:闭包和block一样,第一次使用时可能不习惯它的语法,可以先按照使用简单的闭包,随着学习的深入,慢慢掌握其灵活的运用方法. OC中的block
阅读全文
摘要:在OC中我们可以重写set方法来监听属性的改变 Swift中可以通过属性观察者来监听和响应属性值的变化 通常是监听存储属性和类属性的改变.(对于计算属性,我们不需要定义属性观察者,因为我们可以在计算属性的setter中直接观察并响应这种值的变化) 我们通过设置以下观察方法来定义观察者 willSet
阅读全文
摘要:类的构造函数 构造函数的介绍 构造函数类似于OC中的初始化方法:init方法 默认情况下载创建一个类时,必然会调用一个构造函数 即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数。 如果是继承自NSObject,可以对父类的构造函数进行重写 构造函数的基本使用 构造函数的基本使用 类的属性
阅读全文
摘要:类的属性介绍 Swift中类的属性有多种 存储属性:存储实例的常量和变量 计算属性:通过某种方式计算出来的属性 类属性:与整个类自身相关的属性 存储属性 存储属性是最简单的属性,它作为类实例的一部分,用于存储常量和变量 可以给存储属性提供一个默认值,也可以在初始化方法中对其进行初始化,而且必须得有默
阅读全文
摘要:一: 主要内容 类的介绍和定义 类的属性 类的构造函数 一. 类的介绍和定义 Swift也是一门面向对象开发的语言 面向对象的基础是类,类产生了对象 在Swift中如何定义类呢? class是Swift中的关键字,用于定义类 class是Swift中的关键字,用于定义类 注意: 定义的类,可以没有父
阅读全文
摘要:函数的介绍 函数相当于OC中的方法 函数的格式如下 func是关键字,多个参数列表之间可以用逗号(,)分隔,也可以没有参数 使用箭头“->”指向返回值类型 如果函数没有返回值,返回值为Void.并且“-> 返回值类型”部分可以省略 函数的使用注意
阅读全文
摘要:可选类型的介绍 注意: 可选类型时swift中较理解的一个知识点 暂时先了解,多利用Xcode的提示来使用 随着学习的深入,慢慢理解其中的原理和好处 概念: 在OC开发中,如果一个变量暂停不使用,可以赋值为0(基本属性类型)或者赋值为空(对象类型) 在swift开发中,nil也是一个特殊的类型.因为
阅读全文
摘要:元组的介绍 元组是Swift中特有的,OC中并没有相关类型 它是什么呢? 它是一种数据结构,在数学中应用广泛 类似于数组或者字典 可以用于定义一组数据 组成元组类型的数据可以称为“元素” 元组的定义 元祖的常见写法 // 使用元祖描述一个人的信息 ("1001", "张三", 30, 90) //
阅读全文
摘要:字典的介绍 字典允许按照某个键来访问元素 字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的 Swift中的字典 Swift字典类型是Dictionary,也是一个泛型集合 Swift字典类型是Dictio
阅读全文
摘要:数组 数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组分成:可变数组和不可变数组 使用let修饰的数组是不可变数组 使用var修饰的数组是可变数组 //
阅读全文
摘要:字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符串"" 使用 String 的原因 String 是一个结构体,性能更高 NSString 是一个
阅读全文
摘要:区间for循环 特殊写法 如果在for循环中不需要用到下标i 如果在for循环中不需要用到下标i
阅读全文
摘要:#import "ViewController.h" #import "ScoietyViewController.h" #import "HotViewController.h" #import "TopLineViewController.h" /* 父子控制器:多控制器管理:导航控制器,UITabBarController 默认UITabBarController,实现这...
阅读全文
摘要:一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二. if分支语句 和OC中if语句有一定的区别 判断句可以不加() 在Swift的判断句中必须有明确的真假 不再有非0即真 必须有明确的Bool值(swift中的Bool值用false/true来
阅读全文
摘要:一:self class,self superClass super class super superClass 的区别 新建SubPerson继承person,在SubPerson中打印如下: NSLog(@"%@ %@ %@ %@",[self class], [self superclass
阅读全文
摘要:一:swift基本数据类型 Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等 先了解整型和浮点型 整型 有符号 Int8 : 有符号8位整型 Int16 : 有符号16位整型 Int32 : 有符号32位整型 Int64 : 有符号64位整型 Int : 和平台相关(默认,相当于O
阅读全文
摘要:一:认识swift Playground是什么? 从Xcode6开始出现(Swift开始出现) 翻译为:操场/游乐场 对于学习Swift基本语法非常方便 所见即所得(快速查看结果) 语法特性发生改变时,可以快速查看. Swift最基本的语法变化 导入框架 import UIKit 定义标识符时,必须
阅读全文
摘要:一:KVC和KVO的学习 二:利用runtime实现字典转模型
阅读全文
摘要:一:登录注册的界面效果如图 二:界面的搭建 1:登陆界面一般都是moda的模式:新建控制器,勾选xib,则系统会自动关联类,并且自动连线关联view(若是后创建的控制器的xib,则类名相同,关联类,在fileOwer处连线view),而我们自己不用去设置控制器view的frame。或是freefor
阅读全文
摘要:####4.给分类添加属性 * 原理:给一个类声明属性,其实本质就是给这个类添加关联,并不是直接把这个值的内存空间添加到类存空间。 ``` @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do
阅读全文
摘要:####3.动态添加方法 * 开发使用场景:如果一个类方法非常多,加载类到内存的时候也比较耗费资源,需要给每个方法生成映射表,可以使用动态给某个类,添加方法解决。 * 经典面试题:有没有使用performSelector,其实主要想问你有没有动态添加过方法。 * 简单使用 ``` @implemen
阅读全文
摘要:runtime 的实现原理: 二:通过继承重写实现:每次都需要导入头文件,而且项目中很多地方都得需要修改 * 开发使用场景:系统自带的方法功能不够,给系统自带的方法扩展一些功能,并且保持原有的功能。 * 方式一:继承系统的类,重写方法. * 方式二:使用runtime,交换方法. ``` @impl
阅读全文
摘要:一:runtime简介:也是面试必须会回答的部分 二:runtime的消息机制
阅读全文
摘要:一:如何去学习?都去学习什么? 1:学习优秀项目的设计思想,多问几个为什么,为什么要这么设计,这么设计的好处是什么,还能不能在优化 ,如何应用到自己的项目中 2:学习优秀项目的代码风格,代码的封装设计思想,为什么要这么设计,这么设计的好处是什么,还能不能在优化 ,如何应用到自己的项目中,每行代码都要
阅读全文
摘要:一:.Base64补充 ```objc 1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要。 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件。 65字符:A~Z a~z 0~9 + / = 对文件进行base6
阅读全文
摘要:/* 1.AFN它内部默认把服务器响应的数据当做json来进行解析,所以如果服务器返回给我的不是JSON数据那么请求报错,这个时候需要设置AFN对响应信息的解析方式。AFN提供了三种解析响应信息的方式,分别是: 1)AFXMLParserResponseSerializer XML 2) AFHTT
阅读全文
摘要:(2)使用AFN下载文件 ```objc -(void)download { //1.创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.创建请求对象 NSURLRequest *request =
阅读全文
摘要:```objc AFN结构体 - NSURLConnection + AFURLConnectionOperation(已经被废弃) + AFHTTPRequestOperation(已经被废弃) + AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)(已经被
阅读全文
摘要:#####8 WebView的基本使用 ```objc 1 概念性知识 01 webView是有缺点的,会导致内存泄露,而且这个问题是它系统本身的问题。 02 手机上面的safai其实就是用webView来实现的 03 现在的开发并不完全是原生的开发,而更加倾向于原生+Html5的方式 04 web
阅读全文
摘要:#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIWebView *webView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad];...
阅读全文
摘要:#####7 NSURLSession实现文件上传 (1)实现文件上传的方法 ```objc /* 第一个参数:请求对象 第二个参数:请求体(要上传的文件数据) block回调: NSData:响应体 NSURLResponse:响应头 NSError:请求的错误信息 */ NSURLSession
阅读全文
摘要:#####6 使用NSURLSessionDataTask实现大文件离线断点下载(完整) (1)关于NSOutputStream的使用 ```objc //1. 创建一个输入流,数据追加到文件的屁股上 //把数据写入到指定的文件地址,如果当前文件不存在,则会自动创建 NSOutputStream *
阅读全文
摘要:#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIProgressView *proessView; /** 接受响应体信息 */ @property (nonatomic, strong) NSFileHandle *handle; @property ...
阅读全文
摘要:一:NSURLSessionDownloadTask:实现文件下载:无法监听进度 (1)使用NSURLSession和NSURLSessionDownload可以很方便的实现文件下载操作 ```objc /* 第一个参数:要下载文件的url路径 第二个参数:当接收完服务器返回的数据之后调用该bloc
阅读全文
摘要:(1)创建NSURLSession对象,设置代理(默认配置) ```objc //1.创建NSURLSession,并设置代理 /* 第一个参数:session对象的全局配置设置,一般使用默认配置就可以 第二个参数:谁成为session对象的代理 第三个参数:代理方法在哪个队列中执行(在哪个线程中调
阅读全文
摘要:#####2 NSURLSession的基本使用 (1)使用步骤 使用NSURLSession创建task,然后执行task (2)关于task a.NSURLSessionTask是一个抽象类,本身不能使用,只能使用它的子类 b.NSURLSessionDataTask\NSURLSessionU
阅读全文
摘要:#####1 NSURLConnection和Runloop(面试) (1)两种为NSURLConnection设置代理方式的区别 ```objc //第一种设置方式: //通过该方法设置代理,会自动的发送请求 // [[NSURLConnection alloc]initWithRequest:r
阅读全文
摘要:一:MiMEType:一般可以再百度上搜索到相应文件的MiMEType,或是利用c语言的api去获取文件的MiMEType ; //对该文件发送一个异步请求,拿到文件的MIMEType - (void)MIMEType { // NSString *file = @"file:///Users/文顶
阅读全文
摘要:一:输出流 #####7.0 输出流 (1)使用输出流也可以实现和NSFileHandle相同的功能 (2)如何使用 ```objc //1.创建一个数据输出流 /* 第一个参数:二进制的流数据要写入到哪里 第二个参数:采用什么样的方式写入流数据,如果YES则表示追加,如果是NO则表示覆盖 */ N
阅读全文
摘要:#####6.0 大文件断点下载 (1)实现思路 在下载文件的时候不再是整块的从头开始下载,而是看当前文件已经下载到哪个地方,然后从该地方接着往后面下载。可以通过在请求对象中设置请求头实现。 (2)解决方案(设置请求头) ``` //2.创建请求对象 NSMutableURLRequest *req
阅读全文
摘要:一:小文件下载 (1)第一种方式(NSData) ```objc //使用NSDta直接加载网络上的url资源(不考虑线程) -(void)dataDownload { //1.确定资源路径 NSURL *url = [NSURL URLWithString:@"http://120.25.226.
阅读全文
摘要:一:url转码,当url中涉及到中文的时候,要考虑转码,用UTF8对中文的url进行转码 二:MJExtension的使用 1:字典转模型框架 1)相关框架 a.Mantle 需要继承自MTModel b.JSONModel 需要继承自JSONModel c.MJExtension 不需要继承,无代
阅读全文
摘要:二:POST请求 ###0 补充(static) static关键字会在声明变量的时候分配内存,在程序运行期间只分配一次内存。之后再访问时,实际都是在访问原先分配的内存 如果使用static来修饰局部变量,那么局部变量在代码块结束后将不会回收,下次使用保持上次使用后的值。 如果使用static来修饰
阅读全文
摘要:一:RunLoop的应用 二:面试题: ####1.Runloop基础知识 - 1.1 字面意思 a 运行循环 b 跑圈 - 1.2 基本作用(作用重大) a 保持程序的持续运行(ios程序为什么能一直活着不会死) b 处理app中的各种事件(比如触摸事件、定时器事件【NSTimer】、select
阅读全文
摘要:一:RunLoop相关类: 其中:source0指的是非基于端口por,说白了也就是处理触摸事件,selector事件,source1指的是基于端口的port:是处理系统的一些事件 注意:创建一个RunLoop之后,有默认的运行模式mode,也可以为RunLoop指定运行模式,RunLoop启动必须
阅读全文
摘要:#import "ViewController.h" @interface ViewController () /** 注释 */ @property (nonatomic, strong) dispatch_source_t timer; @end @implementation ViewController /** * 1:GCD中的定时器:GCD中的定时器不受NSRanLoop影响 ...
阅读全文
摘要:一:RunLoop的简单介绍 ####1.Runloop基础知识 - 1.1 字面意思 a 运行循环 b 跑圈 - 1.2 基本作用(作用重大) a 保持程序的持续运行(ios程序为什么能一直活着不会死) b 处理app中的各种事件(比如触摸事件、定时器事件【NSTimer】、selector事件【
阅读全文
摘要:#import "ViewController.h" //第一种写法 typedef enum { XMGDemoTypeTop, XMGDemoTypeBottom, }XMGDemoType; //第二种枚举,定义类型 typedef NS_ENUM(NSInteger,XMGType) { XMGTypeTop, XMGTypeBottom, }; /...
阅读全文
摘要:一:NSCash的基本了解 1.SDWebImage相关知识点补充 01.SDWebImage接收到内存警告的时候如何处理?采用监听系统警告通知的方式处理,接收到警告后清空缓存 02.SDWebImage队列最大并发数为6 03.SDWebImage内部设置下载图片超时时间为15m 04.SDWeb
阅读全文
摘要:三:SDWebImage的结构:最顶层的父类是SDWebImageManager,其下有两个子类如图所示
阅读全文
摘要:补充:https在plist中的配置: ###3.多图下载综合示例程序 (1)涉及知识点 01 字典转模型 02 存储数据到沙盒,从沙盒中加载数据 03 占位图片的设置(cell的刷新问题) 04 如何进行内存缓存(使用NSDictionary) 05 在程序开发过程中的一些容错处理 06 如何刷新
阅读全文
摘要:一:操作依赖和监听 二:线程间通信 - 2.4 NSOperation实现线程间通信 (1)开子线程下载图片 ```objc //1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //2.使用简便方法封装操作并添加到队列
阅读全文
摘要:- 2.2 NSOperationQueue基本使用 (1)NSOperation中的两种队列 01 主队列 通过mainQueue获得,凡是放到主队列中的任务都将在主线程执行 02 非主队列 直接alloc init出来的队列。非主队列同时具备了并发和串行的功能,通过设置最大并发数属性来控制任务是
阅读全文
摘要:###2.NSOperation - 2.1 NSOperation基本使用 (1)相关概念 01 NSOperation是对GCD的包装 02 两个核心概念【队列+操作】 (2)基本使用 01 NSOperation本身是抽象类,只能只有它的子类 02 三个子类分别是:NSBlockOperati
阅读全文
摘要:2:MRC 3:通用宏定义: ```objc 使用Crearte函数创建的并发队列和全局并发队列的主要区别: 1.全局并发队列在整个应用程序中本身是默认存在的,并且对应有高优先级、默认优先级、低优先级和后台优先级一共四个并发队列,我们只是选择其中的一个直接拿来用。而Crearte函数是实打实的从头开
阅读全文
摘要:1.UIView和核心动画区别? 核心动画只能添加到CALayer 核心动画一切都是假象,并不会改变真实的值。 2.什么时候使用UIView的动画? 如果需要与用户交互就使用UIView的动画. 不需要与用户交互可以使用核心动画 3.什么场景使用核心动画最多? 在转场动画中,核心动画的类型比较多 根
阅读全文
摘要:可以同时执行多个动画. 创建组动画 CAAnimationGroup *group = [CAAnimationGroup animation]; 平移 CABasicAnimation *anim = [CABasicAnimation animation]; anim.keyPath = @"p
阅读全文
摘要:1.什么是转场动画? 就是从一个场景转换到另一个场景,像导航控制器的push效果,就是一个转场. 2.如何创建转场动画 创建转场动画 CATransition *anim = [CATransition animation]; 设置转场类型 anim.type = @"cube"; anim.dur
阅读全文
摘要:1.帧动画介绍: CAKeyframeAnimation它可以在多个值之间进行动画. 设置多值之间的属性为: 后面是一个数组,就是要设置的多个值. anim.values = @[]; 它还可以根据一个路径做动画. anim.path = 自己创建的路径. 2.图片抖动思路: 其实就是做一个左右旋转
阅读全文
摘要:核心动画之作用在层上面. 动画的本质是改图层的某一个属性. CABasicAnimation *anim = [CABasicAnimation animation]; 图层有那些属性,这里才能写那些属性. anim.keyPath = @"transform.scale"; anim.toValu
阅读全文
摘要:一:隐式动画 什么是隐式动画? 了解什么是隐式动画前,要先了解是什么根层和非根层. 根层:UIView内部自动关联着的那个layer我们称它是根层. 非根层:自己手动创建的层,称为非根层. 隐式动画就是当对非根层的部分属性进行修改时, 它会自动的产生一些动画的效果. 我们称这个默认产生的动画为隐式动
阅读全文
摘要:一:CATransform3D 坐标系如图 : layer的 CATransform3D属性. 只有旋转的时候才可以看出3D的效果. 旋转 x,y,z 分别代表x,y,z轴. CATransform3DMakeRotation(M_PI, 1, 0, 0); 平移 CATransform3DMake
阅读全文
摘要:1.CALayer简介: CALayer我们又称它叫做层. 在每个UIView内部都有一个layer这样一个属性. UIView之所以能够显示,就是因为它里面有这个一个层,才具有显示的功能. 我们通过操作CALayer对象,可以很方便地调整UIView的一些外观属性. 可以给UIView设置阴影,圆
阅读全文
摘要:一:效果如图: 二:代码 画板界面分析. 顶部是一个工具栏.有清屏,撤销,橡皮擦,照片功能.最右部是一个保存按钮 中间部分为画板区域 最下部拖动滑竿能够改变画笔的粗线.可以选颜色. 1.界面搭建 最上部为一个ToolBar,往ToolBar拖些item,使用ToolBar的好处.里面按钮的位置不需要
阅读全文