- 博客(37)
- 收藏
- 关注
原创 三十六
MasonryMasonry的添加布局主要有三个,三个方法的作用分别是创建约束;更新某个约束,其他约束不变;移除先前所有约束,添加新到的约束。(NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;(NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;(NSAr
2020-07-26 19:55:38
124
原创 青梅煮酒论英雄
操曰:“使君知龙之变化否?”玄德曰:“未知其详。”操曰:“龙能大能小,能升能隐;大则兴云吐雾,小则隐介藏形;升则飞腾于宇宙之间,隐则潜伏于波涛之内。方今春深,龙乘时变化,犹人得志而纵横四海。龙之为物,可比世之英雄。玄德久历四方,必知当世英雄。请试指言之。”操曰:“夫英雄者,胸怀大志,腹有良谋,有包藏宇宙之机,吞吐天地之志者也。”...
2020-07-20 19:18:34
128
原创 三十五
三十五音视频捕捉会话:AVCaptureSession 是管理捕获活动并协调从输入设备到捕获输出的数据流的对象。AVCaptureSession 用于连接输入和输出的资源,从物理设备如摄像头和麦克风等获取数据流,输出到一个或多个目的地。AVCaptureSession 可以额外配置一个会话预设值(session preset),用于控制捕捉数据的格式和质量,预设值默认值为 AVCaptureSessionPresetHigh。要执行实时捕获,需要实例化AVCaptureSession对象并添加适当的
2020-06-29 20:41:19
193
原创 三十四
三十四音视频AVFoundation 是 Objective-C 中创建及编辑视听媒体文件的框架之一,提供了检查、创建、编辑或重新编码媒体文件的接口,也使得从设备获取的视频实时数据可操纵。通常情况,简单的播放或者录像,直接使用 AVKit 框架或者 UIImagePickerController 类即可。另外,在 AVFoundation 框架中使用的基本数据结构,时间相关的或描述媒体数据的数据结构都声明在 CoreMedia 框架中。AVFoundation 是 OSX 系统和 iOS 系统中用于处
2020-06-21 19:32:39
203
原创 三十三
三十三CocoapodsCocoaPods是为iOS工程提供第三方依赖库管理的工具,用CocoaPods可以更方便地管理第三方库:把依赖库统一放在Pods工程中,同时让主工程依赖Pods工程。Pods工程的target是libPods-targetName.a静态库,主工程会依赖这个.a静态库。CocoaPods相比手动引入framework或者子工程依赖的方式,有两个便捷之处:所有Pod库集中管理,版本更新只需Podfile配置文件;依赖关系的自动解析;CocoaPods的使用流程很简单:(假
2020-06-16 20:09:54
137
原创 三十二
三十二类名、协议名应该为类与协议的名称加上前缀,以避免命名空间冲突(因为OC其实没有命名空间),而且应该像给方法起名时那样把词句组织好,使其从左至右读起来较为通顺。UITableView(类) 这是一种特殊类型的视图,可以显示表格中的一系列条目。所以,它在超类(UIView)名称中的 View 一词前面加了 Table 这个修饰词,用以和其他类型的视图相区隔。在超类名称前加修饰语是一种常用的命名惯例。本类也可以叫做 UITable,不过这个名字无法完整传达出 “视图”这个概念。开发者必须查看接口声
2020-06-13 20:29:18
195
原创 三十一
三十一消息转发机制当给object发送它无法解析的消息的时候就会触发消息转发机制:消息转发分为两大阶段:第一阶段:征询接收者,所属的类,看其是否能动态添加方法,以处理当前这个“未知的选择器”。这叫做“动态方法解析”。第二阶段:涉及“完整的消息转发机制”。运行时系统会请求接受者以其他手段来处理与消息相关的方法调用。分两小步:1:请接收者看看有没有其他对象能处理未知消息,若有,则运行时系统会把消息转给那个对象。这叫做“备援接收者”。若没有进行第二步。2:启动完整的消息转发机制,运行时系统会把与消息有关的
2020-06-10 22:28:46
102
原创 三十
三十OC、类、对象、运行期动态绑定首先是OC其实是基于“消息机制”的调用的时候:Student *student = [Student new];[student getName:name];代码会被翻译为以下执行:(还是类似函数调用,但是实际执行的时候查方法列表来执行方法)objc_msgSend(student,@selector(getName:),name);selector通过NSObject也就是类的isa指针找到,isa指针结构里面有方法列表。这一切都是在运行时也就是runt
2020-06-08 20:19:48
141
原创 二十九
内存布局:不同内存布局区域的含义stack(栈):方法调用heap(堆):通过alloc等分配的对象bss:未初始化的全局变量data:已初始化的全局变量text:程序代码ARC和MRC1.MRC 手动引用计数allocretainreleaseretainCountautoreleasedealloc2.ARC 自动引用计数ARC是LLVM和Runtime协作的结果ARC禁止手动调用retain、release、retainCount、deallocARC中新增weak
2020-06-07 21:26:23
153
原创 二十八
ARC帮我们做了什么?使用LVVM + Runtime 结合帮我管理对象的生命周期LVVM 帮我们在代码合适的地方添加release、retarn、autorelease等添加计数器或者减少计数器操作Runtime 帮我们像__weak、copy等关键字的操作initialize和load是如何调用的?它们会多次调用吗?load方法一个类只会调用一次(除去手动调用),而调用的数序是,从s...
2020-03-13 23:15:50
156
原创 二十七
二十七OC:OC是一门面向对象的语言,具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定、动态加载等)。Objective-C具有相当多的动态特性,表现为三方面:动态类型(Dynamic typing)、动态绑定(Dynamic binding)和动态加载(Dynamic loading)。动态——必须到运行时(run time)才会做...
2020-03-06 22:39:41
97
原创 二十六
SDWebImage底层实现原理:1.将下载任务 添加到全局队列 异步执行 回到主队列主线程更新UI 采取占位图片2.网络问题下载速度不一致 用户滚动会导致错行 采取MVC设计模式属性表格 但是下载图片都会记录到模型中,如果数据过多就会造成占据很大内存空间 也不易清理 采取图片缓存池 回调主线程中将下载好图片kvc保存起来 下次赋值先从缓存池中拿3.如果图像下载很慢,用户滚动很快,就会...
2020-03-05 23:07:11
78
原创 二十五
App上架:内购:1.配置开发者账号:iTunes Connect1,协议/税务/银行 2,生成内购商品 3,构建上架版本中添加商品 4,添加沙箱测试账号2.代码使用内购 1,请求购买列表 2,苹果服务器返回有效的商品 3,显示商品 4,用户购买 添加交易队列 5,KVO 监听交易队列 6,处理购买结果如何申请开发者账号申请开发者账号,首先要申请邓白氏开发者账号分三...
2020-03-04 22:44:31
118
原创 二十四
设置图层渐变颜色出现的问题:视图没有效果:设置梯度之前需要设置视图的大小和位置,是因为没有设置 layer 的 bounds 和 position,将C的对象桥接成OC 的对象,最好不要进行一个内存管理交接权(_transfer关键字)否则会导致意料之外的随机的没有任何提示的内存泄漏的崩溃。原因:在 C 转为 OC 的时候支付:支付宝支付:1.APP向服务器请求商品数据2.服务器返回商...
2020-03-03 22:37:31
101
原创 二十三
循环引用:block与delegate循环引用问题block:代码块里面用self调用的对象,block对它会一次强引用,引用计数加一. 在 Block 内如果需要访问 self 的方法、变量采用weakself,避免循环引用,造成内存泄露.Masonry的self不会造成循环引用, 因为 Masonry ,它内部根本没有捕获变量 self,进入block的是testButton,所以执行完...
2020-03-02 22:13:47
352
原创 二十二
XMPP:XMPP三大节点:XMPPPresence:出席(登录,下线,隐身等) XMPPMessage:消息XMPPIQ:信息请求(info query)特点:服务端->客户端XMPP是一个典型的C/S架构,架构服务器压力大,客户端简单。P/P架构服务器压力小,客户端复杂。XMPP协议的传输是通过XML文件来传输的,并且不是类似于QQ的点对...
2020-03-01 22:29:12
142
原创 二十一
NSOperation:NSOperation基于GCD(中央调度组),比GCD多了一些更简单实用的功能(设置最大并发数/暂停取消/继续,完成跨队列的依赖关系),更加面向对象。GCD代码简洁,GCD提供的dispatch_after支持调度下一个操作的开始时间而不是直接进行睡眠GCD没有操作依赖,没有操作优先级(有队列优先级)GCD中只能区分不同任务队列的优先级,如果需要区分block任务的...
2020-03-01 00:14:08
99
原创 十九
蓝牙:扫描外设中的服务和特征:(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{NSLog(@“Did connect to peripheral: %@”, peripheral);_testPeripheral = peripheral;...
2020-02-27 22:04:12
105
原创 十八
蓝牙:背景蓝牙的实现方案:CoreBluetooth.framework创建中心角色扫描外设连接外设蓝牙开发:背景:iOS的蓝牙不能用来传输文件。iOS与iOS设备之间进行数据通信,使用gameKit.frameworkiOS与其他非iOS设备进行数据通信,使用coreBluetooth.frameworkiOS中蓝牙的实现方案iOS中提供了4个框架用于实现蓝牙连接Ga...
2020-02-26 21:35:10
192
原创 十六
NSFilemanger 文件管理对象:单例对象判断某个路径文件是否存在判断是否是同一个目录判断文件是否可读判断文件是否可写判断文件是否可以删除获取文件的属性使用递归方式获取文件直接获取文件及子目录获取指定目录下的文件及目录信息根据路径创建文件将字符串转换成二进制移动文件删除文件NSNumber的包装:NSNumber普通包装NSNumber快速包装NSValu...
2020-02-24 22:04:58
146
原创 十五
NSDictionary的基本使用:普通初始化初始化的时候指定字典的键值对快速创建键值对的方法使用枚举遍历字典获取字典中的某个元素把字典写入文件中从文件中读取字典读取plist中的内容使用block遍历字典中的内容...
2020-02-23 09:57:55
66
原创 十四
NSArray基本使用:直接初始化创建只有一个元素的数组创建有多个元素的数组调用对象方法,创建数组用数组创建另一个数组简化数组元素的创建获取数组某个元素通过下标访问元素数组的遍历方式NSArray读写文件快速包装数组将字符串分割成数组取出数组元素的方法...
2020-02-22 09:45:09
172
原创 其七
进程,线程,锁:线程的创建及初始化执行线程获取与设置线程判断线程使用互斥锁使用递归锁使用条件锁数据对象及归档:数据对象的创建及初始化数据对象的使用可变数据对象进程,线程,锁:线程的创建及初始化1,detachNewThreadSelector: 方法:创建线程2,init: 方法:初始化线程3,initWithTarget: 方法:初始化线程执行线程1,star...
2020-02-15 21:55:16
96
原创 其六
时间和日历:日历时间的创建及初始化获取日历时间信息设置日历时间日历的使用时区的使用定时器的使用进程,线程,锁:使用进程线程的创建及初始化执行线程获取与设置线程判断线程使用互斥锁使用递归锁使用条件锁...
2020-02-14 09:42:55
83
原创 其五
文件:文件与目录的操作获取文件和目录信息判断文件文件读取目录工具函数时间和日历:时间的创建及初始化时间的比较获取时间时间和字符串的相互转换日历时间的创建及初始化获取日历时间信息设置日历时间日历的使用时区的使用定时器的使用...
2020-02-13 09:40:17
159
原创 其一
一,iPhone系列分辨率以及尺寸等分类 分辨率 尺寸 状态栏高度 导航栏高度 标签栏高度iPhone 11 Pro Max 2688x1242px 6.5英寸 132px 132px 147pxiPhone 11 Pro 2436x1125px 5.8英寸 132px 132px 147pxIphone 11 1792x828px...
2020-02-09 21:17:24
188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人