- 博客(54)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 iOS 底层学习 -Blocks
BlockBlock 概念????Block 实质Block 概念Block是带有自动变量的匿名函数。如字面意思,Block没有函数名,另外Block带有插入记号"^",插入记号便于查找到Block,后面跟的一个括号表示块所需要的一个参数列表。和函数一样,可以给块传递参数,并且也具有返回值。不同点在于,块定义在函数或者方法内部,并且能够访问在函数或方法范围内的任何变量。通常情况下,这些变量能够访问但不能改变其值,有一个特殊的块修改器(由块前面由两个下划线字符组成)能够修改块内变量的值。Blocks
2020-08-07 16:49:20
161
原创 iOS开发 NSURLSessionDataTask离线断点下载(断点续传)
NSURLSessionDataTask离线断点下载获得文件全路径创建会话对象创建任务获得指定文件路径对应文件的数据大小开始下载暂停下载取消下载继续下载获得文件全路径- (NSString *)fullPath { if (_fullPath == nil) { //获得文件全路径 _fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES
2020-10-07 23:00:48
245
原创 iOS单元测试 XCTest
XCTest 框架简介Overview(概述)TopicsTest Cases and Test MethodsXCTestCaseXCTestCustomizing Test Setup and TeardownsetUptearDownHandling Test Case FailureMeasuring PerformancemeasureBlock:defaultPerformanceMetricsXCTPerformanceMetricCreating Asynchronous Test Expe
2020-09-05 20:17:23
642
原创 iOS开发-GCDAsyncSocket源码分析
GCDAsyncSocket源码分析GCDAsyncSocket.m的成员变量GCDAsyncSocket的初始化创建GCDAsyncSocket ConnectGCDAsyncSocket.m的成员变量@implementation GCDAsyncSocket{ //flags 状态标志 uint32_t flags; //config IPV4|IPV6配置 uint16_t config; // 代理 __weak id<G
2020-09-04 13:00:45
421
iOS开发--GCDAsyncSocket应用
GCDAsyncSocketGCDAsyncSocket使用????连接socket????重连????pragma mark - 发送????关闭socket????GCDAsyncSocketDelegateGCDAsyncSocket是CocoaAsyncSocket第三方库中的其中一个类,本文介绍的就是基于这一个类来做快速的socket通信开发GCDAsyncSocket使用通过pod导入 pod ‘CocoaAsyncSocket’ 导入头文件 #import <GCDAsync
2020-09-04 12:07:39
421
原创 iOS开发--socket通讯
Socket通信????概念TCPUDPsocket基本原理连接建立步骤参考文章????概念在移动开发中,我们在很频繁地和后台接口进行数据通讯,通常是http请求,http是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息,http遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理
2020-09-03 12:03:14
897
原创 GCD大中枢派发学习
GCD大中枢派发学习iOS中的常见多线程方案常见的GCD 使用 和死锁在这里强调一下容易混洗的术语GCD 多线程的安全隐患简单的一些理解????多线程安全隐患的解决iOS线程同步方法锁的概念OSSpinLockos_unfair_lockpthread_mutexNSLock、NSRecursiveLockdispatch_semaphore@synchronized锁的性能比较互斥锁和自旋锁的比较iOS中的常见多线程方案首先我们在学习多线程之前先了解一下iOS常见的多线程的方案常见的GCD 使用
2020-08-05 10:48:44
154
原创 Runloop 应用 -线程保活
在开发场景中,有可能需要对某条线程保活,让这条线程在有事情做的时候进行工作,没有事情做的时候进行休眠。线程保活创建线程和在线程获得runloop停止Runloop创建线程和在线程获得runloop这里面我创建了一个线程 为MYthread 继承 NSThread对delloc方法进行重写 帮助我们判断线程是否存活创建线程的方法大致有两种-(void) TargetcreatMyThread { self.myThread = [[MyThread alloc] init.
2020-08-02 11:58:27
397
原创 RunTime msgSend消息转发机制
msgSend执行流程消息发送动态方法解析消息转发执行流程消息发送文件名objc-msg-arms.s,可以看到,它是由汇编编写的,这样运行效率更高, ENTRY代表方法的入口,消息发送从ENTRY_objc_msgSend这里开始执行,首先通过isa指针拿到对象的类,然后再到方法缓存中查找对应的方法,对应的代码是GetClassFromIsa和 CacheLookup NORMAL, _objc_msgSend.ENTRY _objc_msgSend cbz r0, LNilRece
2020-07-29 19:53:03
347
原创 RunTime Class 结构
目录ClassClass定义:Objective-C类是由Class类型来表示的,它实际是一个指向objc_class结构体的指针。它的定义如下typedef struct objc_class *Class;打开objc源码 可以看到class的结构有两处首先struct objc_class { Class _Nonnull isa OBJC_ISA_AVAILABILITY;#if !__OBJC2__ Class _Nullable super_clas.
2020-07-28 21:41:35
310
原创 深入理解 iOS内存管理
之前就总结过内存管理的内容,但感觉不是很底层,系统,全面,最近开始暑假学习,所以好好把这一块内容规整一下,因为说起内存管理,这是一个很庞大而又与开发密不可分的内容,虽然ARC下我们几乎不需要手动管理内存,但我们还是要了解一些内存管理的原理和内存优化的方案。文章目录一.iOS内存布局iOS内存管理方案TaggedPointerNon-pointer iSA--非指针型iSA散列表 SiddeTableMRC&ARCretainCount的的底层实现retain自动释放池一.iOS内存布局关于.
2020-07-15 22:21:43
397
原创 macOS Catalina 10.15 配置安装 CocoaPods
这里写自定义目录标题CocoaPods什么是CocoaPods?为什么要使用 CocoaPods?CocoaPods 的原理CocoaPods的安装步骤Ruby环境1、设置 ruby 源1.1、查看自己电脑的 ruby 源1.2更换 ruby 镜像CocoaPods安装2.2、检测是否安装成功由于之前电脑重新安装了黑苹果系统,重新配置了CocoaPodsCocoaPods什么是CocoaPods?ocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。CocoaPods 的项目源码在 G
2020-05-17 21:24:42
973
原创 RunLoop学习总结
文章目录初识RunLoop概念代码模型(Event Loop)RunLoop对象RunLoop相关的类CFRunLoopModeRefRunLoop 的 Mode类型RunLoop与线程RunLoop运行逻辑RunLoop 的内部逻辑初识RunLoopRunloop 是和线程紧密相关的一个基础组件,是很多线程有关功能的幕后功臣。尽管在平常使用中几乎不太会直接用到,理解 Runloop 有利于我...
2020-04-26 00:54:52
349
原创 iOS响应者链和事件传递
iOS的事件1、触摸事件2、加速计事件(运动事件)3、远程控制事件这三类事件共同构成了iOS设备丰富的操作方式和使用体验,本篇章博客针对第一类事件:触控事件,进行学习和分析。响应者对象UIResponderUIResponder是iOS中用于处理用户事件的API,可以处理触摸事件、按压事件(3D touch)、远程控制事件、硬件运动事件。可以通过touchesBegan、pr...
2020-03-27 23:42:25
463
原创 iOS - 内存管理学习总结
文章目录基础概念内存管理的重要性什么是内存管理堆和栈引用计数概念作用操作几个熟悉关键字MRCsetter 方法autorelease基本概念自动释放池循环引用ARC基本概念基本使用基础概念内存管理的重要性移动设备的内存有限以下行为会增加app的内存+ 创建一个OC对象+ 定义一个变量+ 调用函数和方法如果app的内存占用过大会导致关闭app影响用户体验什么是内存管理...
2020-03-26 01:29:44
378
原创 数据库 SQL 语句学习
文章目录MySQL基本操作一、SQL语法规则二、SQL库操作1、创建数据库2、显示数据库3、使用数据库4、修改数据库5、删除数据库6、总结三、SQL表(字段)操作1、创建数据表2、显示数据表3、查看数据表4、更改数据表5、更改字段5.1、新增字段5.2、字段位置5.3、更改字段名5.4、修改字段6、删除字段7、总结四、SQL数据操作1、新增数据2、查看数据3、更新数据4、删除数据5、总结6、练习 ...
2020-03-24 12:14:28
1874
原创 初识MySQL
一、数据库基本介绍目标:了解数据库的功能和常见数据库分类、数据库产品数据库基本知识数据库分类SQL简介MySQL访问1、数据库基本知识目标:了解数据库的概念和数据库的作用概念数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和管理数据数据库能够长期、高效的管理和存储数据数据库的目的就是能够存储(写)和提供(读)数据2、...
2020-03-24 10:18:42
233
原创 iOS 底层学习—-KVO
文章目录KVOKVO使用KVO本质探究首先存在的疑问本质探究KVC 原理setvalue :forkey :valueForkey :KVOKVO的全称是Key-Value Observing ,俗称“健值监听”,可以用与监听某个对象属性值的改变KVO使用有关KVO的使用可以看早期这篇博客iOS消息机制—KVOKVO本质探究首先存在的疑问我们先进行探究 创建两个实例对象 然后对pe...
2020-02-02 23:01:52
204
原创 iOS 底层学习—-OC对象
文章目录Objective-C的本质思考:一个OC对象在内存中如何布局的?NSObjctive 的底层实现思考:一个Person对象,一个 student对象占用多少内存?![在这里插入图片描述](https://img-blog.csdnimg.cn/20200201212946707.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVp...
2020-02-01 23:24:14
337
原创 Effective Objective-C 2.0读书笔记 Ⅱ
文章目录接口与API设计用前缀避免命名空间冲突提供"全能初始化方法"实现 description 方法尽量使用不可变对象接口与API设计用前缀避免命名空间冲突1.选择公司,应用程序或二者皆有关联之名称作为类名的前缀,并在所有代码中均作为前缀2。若自己开发的程序库中用到了第三方库,则应为其中的名称加上前缀提供"全能初始化方法" 在类中提供一个全能初始化方法,其他初始化方法均应调用此方法...
2020-01-24 12:45:54
4241
原创 Learn git
git CommitGit 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上...
2020-01-19 22:32:33
588
原创 Effective Objective-C 2.0读书笔记 Ⅰ
文章目录1 . 了解 Objective-C 语言的起源2.在类的头文件中尽量少引入其他头文件3. 多用字面量语法,少用与之等价的方法4. 多用类型常量,少用# deine 预处理指令5.用枚举表示状态,选项,状态码6. 理解属性这一概念7. 在对象内部尽量直接访问实例变量1 . 了解 Objective-C 语言的起源Objective-C 语言使用”消息结构”而非”函数调用”.Object...
2020-01-13 23:08:37
260
原创 数据结构 -快速排序复习
快速排序快速排序与归并排序一样基于分治法,但其执行partition进行分割时就已经在原属组完成了排序。代码如下#import <Foundation/Foundation.h>#include <stdio.h>int a[101] , n;void quickSort(int left, int right) { int i, j, t, temp;...
2019-12-14 22:07:58
395
4
原创 iOS 属性关键字及相关面试题
readwrite编译器会自动生成setter/getter方法;可以读、写;readwrite是默认的;readonly声明你的属性是只读的,并且告诉编译器不用自动生成setter方法;当你尝试给一个readonly的属性赋值时,会Xcode提示错误。copy在iOS开发中,一般copy关键字用在NSString、NSArray、NSDictionary等...
2019-12-14 21:45:30
367
原创 有向图的创建、求度、遍历
题目描述从键盘接收有向图的顶点集,弧集,创建有向图,并完成下列任务:(1)计算结点的出度、入度以及度;(2) 从第一个顶点出发,求一个深度优先遍历序列;(3) 从第一个顶点顶点出发,求一个广度优先遍历序列。注意:以用户输入各个顶点的顺序为顶点的序号。在深度和广度优先遍历中,优先选择序号小的顶点。图的领结矩阵的数据类型描述如下#define MAX 20 // 最大顶点个数typ...
2019-12-08 01:07:28
1084
原创 iOS NSThread
NSThread简介NSThread是苹果官方提供面向对象操作线程的技术,简单方便,可以直接操作线程对象,不过需要自己控制线程的生命周期。在平时使用很少,最常用到的无非就是 [NSThread currentThread] 获取当前线程。下边我们说说 NSThread 如何使用。创建线程1、 实例初始化、属性和实例方法初始化//创建线程NSThread *newThread =...
2019-12-07 22:41:37
134
原创 iOS GCD 死锁
文章目录1.死锁产生的原因原因分析总结一下发生死锁的原因是因为 在当前队列中同步加入任务从而造成死锁。1.死锁产生的原因死锁是指多个进程或线程在运行过程中因争夺资源而造成的一种僵局。若无外力作用,它们都将无法向前推进。通俗来讲,死锁是多个进程或线程互相等待其它的进程或线程完成后才能继续执行,这样相互等待谁都无法完成。案例在主线程中调用同步执行 + 主队列 - (void)view...
2019-12-01 00:49:21
405
原创 iOS - GCD的简单的用法
在学习简单使用GCD API 之前我们先简单了解一下基本概念。文章目录在学习简单使用GCD API 之前我们先简单了解一下基本概念。同步和异步并行|并发和串行队列串行队列并行队列官方文档GCD的使用队列的创建方法|获取方法任务的创建方法GCD之间的通信GCD 的其他方法GCD 栅栏方法 dispatch_barrier_asyncGCD 延时执行方法:dispatch_afterGCD 一次性代...
2019-11-30 22:48:01
152
原创 iOSWKWebView的简单使用
本周学习使用WKWebView对网页进行托管实现类似如下的效果代码实现如下#import “ViewController.h”@interface ViewController ()@property (nonatomic,strong)WKWebView * webView;@end@implementation ViewController(void)viewDidLoa...
2019-11-23 22:24:01
372
原创 iOS的深拷贝和浅拷贝
深拷贝和 浅拷贝的概念首先在谈论iOS深拷贝和浅拷贝之前先给出对应概念深拷贝 :浅拷贝并不拷贝对象本身,只是对指向对象的指针进行拷贝浅拷贝 :直接拷贝对象到内存中一块区域,然后把新对象的指针指向这块内存一个小小的注意事项在iOS中并不是所有对象都支持Copy和MutableCopy,遵循NSCopying协议的类可以发送Copy协议,遵循NSMutableCopying协议的类可以发送M...
2019-11-23 21:29:09
186
原创 数据结构 - 二叉树的建立 遍历高度 哈夫曼树的建立 译码 编码
本周学习了数据结构中的树现在对此进行一些总结首先进行树的创建树的定义树是一种非常重要的非线性数据结构,可用来描述客观世界中广泛存在的具有分支或层次关系的对象。树的建立tree* creatTree() { //ABC##DE#G##F### tree* p; char value; scanf("%c", &value); if (valu...
2019-11-17 08:57:28
228
原创 iOS category简单的使用
categoryCategory是我们在开发中经常用到的,它可以在我们不改变原有类的前提下来动态地给类添加方法。也就是说我们想为某一个类补充一个方法是就可以用到这个。最近在写项目中遇到这样一个问题,就是对nsstring的处理,我们请求完数据后会返回一个2019-11-01 ,而我们需要的是11月01日,所以为我用category对类进行扩充添加一个方法。具体实现如下首先创建一个Object...
2019-11-02 18:12:13
227
原创 KVO监听使用及案例
简单描述最近在写豆瓣UI中发现有一个二次加载,简单来说,有二十个tableviewcell就是在第一次加载的时候会加载10个到了第十个的时候他会在刷新进行请求,会在加载剩下的十个,下面就来简单实现这个功能。大体思路我的思路就是首先设置tableview的位置,如果他滑动到了10个的位置就进行改变返回20;首先第一步就是对就tableview进行监测对tableview添加观察者如下...
2019-11-02 17:51:30
346
原创 leecode 121 122 买卖股票的最佳时机
买卖股票的最佳时机题目解题思路如下int maxProfit(int* prices, int pricesSize){ int minprice, maxprofit = 0; int i = 0; if(pricesSize > 0 ) { minprice = prices[i]; } for(i = 0; i ...
2019-10-26 15:51:52
191
原创 iOS 第三方库JSONModel的基本使用
首先我们需要配置好Cocoaposds,在这里就不详细说明首先我们需要创建一个Xcode项目在终端进入到这个文件接下来vim podfile然后输入i进行输入第三方库 pod ‘JSONModel’然后退出按ESC 在输入:WQ然后安装 就是 pod install 就会成功安装JSONModel 的基本使用网络请求完毕后一般我们需要手动解析,但是在软件开发中这是非常麻烦,而且...
2019-10-26 15:29:56
1367
原创 iOS Manager 解析json
先从单例开始1.在iOS开发过程中,需要使用到一些全局变量以及管理方法,可以将这些变量以及方法封装在一个管理类中,这是符合MVC开发模式的,这就需要使用单例(singleton)。2.使用单例模式的变量在整个程序中只需要创建一次,而它生命周期是在它被使用时创建一直到程序结束后进行释放的,类似于静态变量,所以我们需要考虑到它的生命周期,唯一性以及线程安全。在这里,我们需要实用GCD来实现单例模式...
2019-10-26 14:56:14
181
原创 iOS懒加载的使用
懒加载的本质懒加载,亦叫延迟加载,即在第一次需要的时候才去加载,本质上就是对一个实例的getter方法的重写。懒加载的使用懒加载的使用也相对简单,举个栗子#import “ViewController.h” @interface ViewController () @property (nonatomic, strong) UILabel *label; @end @imple...
2019-10-20 01:48:56
262
原创 马踏棋盘问题的优化
数据结构——马踏棋盘题解(贪心算法)马踏棋盘问题是一个很经典的问题一般的解决方法就是dfs,但是由于每次踏的方向不同,和初始值的不同,可能会增加这个问题的复杂的,所以在这里我们采用一些贪心算法,加权值进行优化使用循环建立棋盘与权值棋盘(权值为该位置可走的位置数量)将当前步数写入棋盘数组中开始探测下一步该走的位置, 分别测试八个方向对可走位置进行查询权值,将权值最少的作为下一步的位置(每...
2019-10-13 02:29:56
460
原创 初识Block
Block定义 带有自动变量(局部变量)的匿名函数。既然这里说是匿名函数那么就和函数很相像相似点1.可以保存代码2.有返回值3.有形参数4调用方式一样一般来说Block用于保存一段代码Block的标志 ^定义Block变量^ 返回值类型 参数列表 表达式返回值类型和参数列表可以省略Block的截取int age=10;void (^Block)(void) =...
2019-10-13 02:04:24
137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人