自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

smile_sunshine

iOS大师之路

  • 博客(67)
  • 收藏
  • 关注

原创 iOS GIF图片分解保存单张图片

GIF图像分解保存为单张图片的方法

2022-06-29 16:47:05 695 1

原创 WCDB的基础使用

本文旨在记录自己项目过程中的一些使用,想要了解更多的小伙伴移步到这里:WCDB wiki1.集成使用cocoapods集成到项目中pod 'WCDB'2.封装这里封装了一个工具类,专门对数据库创建,表创建,查询,更新等操作的封装!由于WCDB是基于Objective-C++,因此需要将引用WCDB的源文件后缀.m改为.mm为避免大范围更改,我们将使用WCDB代码的类隔绝起来!WMDBManager.h文件#import <Foundation/Foundation.h>N

2021-04-08 15:24:54 1561

原创 WKWebVIew与UITableView嵌套页面解决方案

WKWebVIew与UITableView嵌套页面的手势冲突解决方案问题描述:一个详情界面,上部分为WKWebView,下部分为UItableView,webview展示详情界面内容,tableVIew展示详情相关推荐列表!实现要求:webView与tableView连贯且滑动时不能有卡顿或者出现手势冲突的问题!首先大家会想到使用tableview,将webView放在cell或者TableHeaderView,这些都是可以的,但是唯一的难点就是怎么获取到webView的高度,让cell或者Tabl

2021-02-09 16:56:23 862

原创 数据结构与算法(一) ---- 入门

1.数据结构基本术语数据:程序的操作对象,用于描述客观事物.特点:1.可以输入到计算机;2.可以被计算机处理数据元素:组成数据的对象的基本单位数据项:一个数据元素由若干数据项组成数据对象:性质相同的数据元素的集合(类似于数组)数据结构:指的数据对象中的数据元素之间的关系2.数据结构 - 逻辑结构1.集合结构 特点:确定性、互斥性、无序性;如公共汽车上的所有乘客!2.线性结构 特点:线性结构是一对一的关系;例如:线性表,一维数组、队列、栈、堆;3.树形结构

2020-11-05 16:48:13 289

原创 iOS启动优化(二)

上一篇讲到了二进制重排的难点与核心点是如何找到启动过程中的所有符号表以及符号表的顺序,那么这一篇我们就来研究如何找到它!

2020-10-26 17:20:26 269

原创 iOS启动优化(一)

启动优化

2020-10-21 17:04:27 771

原创 iOS底层原理篇(十八) ---- Block底层原理

1.block本身的copy2.__block修饰的属性的copy3.block捕获属性值的copy

2020-08-19 16:05:46 351

原创 iOS底层原理篇(十七) ---- Block初探

1.Block的分类Block有六种:在libclosure的源码中 //常见的三种 void * _NSConcreteStackBlock[32] = { 0 }; void * _NSConcreteMallocBlock[32] = { 0 }; void * _NSConcreteGlobalBlock[32] = { 0 }; //系统级别的三种 void * _NSConcreteAutoBlock[32] = { 0 }; void * _NSConcret

2020-08-07 20:53:05 257

原创 iOS底层原理篇(十六) ---- 自旋锁 atomic

1.概念自旋锁:它是为实现保护共享资源而提出的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。调度机制上略有不同:互斥锁:如果资源已经被占用,资源申请者只能进入睡眠状态。自旋锁:不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。可能存在两个问题:试图递归地获得自旋锁

2020-08-06 12:42:34 1459

原创 iOS底层原理篇(十五) ---- 条件锁NSCondition&NSConditionLock

1.NSCondition需求:生产者与消费者,生产者生产商品,消费者消耗商品,只有生产者产出的商品个数大于0时,消费者才能消费,否则等待生产者生产商品!实现: - (void)viewDidLoad { [super viewDidLoad]; self.productCount = 0; [self wm_conditon]; } - (void)wm_conditon { _condition = [[NSCondition alloc] init]

2020-08-05 17:27:36 1110

原创 iOS底层原理篇(十四) ---- NSLock、NSRecursiveLock、@synchronize比较

首先看一个crash - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"123"); [self wm_crash]; } - (void)wm_crash{ for (int i = 0; i < 200000; i++) { dispatch_async(dispatch_get_global_queue(0, 0), ^{ _testArray = .

2020-08-04 17:48:47 1117

原创 iOS底层原理篇(十三)----synchronize源码分析

今天开始,学习一下iOS相关锁的分析!@synchronized首先来看一个经典的买票案例: - (void)viewDidLoad { [super viewDidLoad]; self.ticketCount = 20; [self wm_testSaleTicket]; } - (void)wm_testSaleTicket{ dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (int i

2020-08-04 15:35:50 604

原创 iOS底层原理篇(十二)----GCD源码分析(二)

线程组 dispatch_group相关函数 //创建组 dispatch_group_t dispatch_group_create(void); //进组 void dispatch_group_enter(dispatch_group_t group); //出组 void dispatch_group_leave(dispatch_group_t group); //通知 void dispatch_group_notify(dispatch_group_t g

2020-07-28 16:08:37 285

原创 iOS底层原理篇(十一)----GCD源码分析(一)

同步函数 dispatch_sync先来看一张图:上面是死锁现象的分析,我们下面来看看底层的代码实现: void dispatch_sync(dispatch_queue_t dq, dispatch_block_t work) { uintptr_t dc_flags = DC_FLAG_BLOCK; if (unlikely(_dispatch_block_has_private_data(work))) { return _dispatch_sync_bl

2020-07-27 16:59:03 1269

原创 iOS底层原理篇(十)----GCD应用

GCD之信号量之前的博文GCD的几个面试题中,有一个这样的面试题,具体打印及分析可以去看看,但是今天我们说的是另外一个问题:下图中,while循环外的打印,我就想要得到哈哈哈10的打印结果,我们该怎么处理?这里面发生了资源抢夺问题,很多线程同时对a进行操作,我们在这里可以使用信号量来完成需求!此处的关键是信号量上锁与解锁的代码插入的位置,我们在a++后面上锁,...

2020-07-22 17:26:20 377

原创 iOS底层原理篇(九)----GCD底层原理

简介

2020-06-13 14:34:27 2045

原创 iOS底层原理篇(八) ---- 多线程概念

多线程相关概念1.线程与进程1.线程定义线程是进程的基本执行单元,一个进程的所有任务都在线程中执行进程要想执行任务,必须得有线程,进程至少要有一条线程程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程2.进程定义进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存3.线程与进程的关系地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cp

2020-06-03 16:47:12 295

原创 iOS底层原理篇(七)----KVO底层实现

前言1.Key-Value Observing Implementation DetailsAutomatic key-value observing is implemented using a technique called isa-swizzling.使用isa-swizzling技术实现自动键值观察。The isa pointer, as the name suggests, points to the object’s class which maintains a dispatc

2020-06-02 15:47:41 281

原创 iOS进阶之路----高级开发之路

iOS学习的过程和记录!1.iOS RunTime详解—源码分析2.iOS Runtime详解—动态方法决议与消息转发3.iOS底层原理篇(一)----类的本质和底层实现4.iOS底层原理篇(二)----类的缓存5.iOS底层原理篇(三)----类的编译、链接与加载6.iOS底层原理篇(四)----拓展、分类、关联对象7.iOS底层原理篇(五)----KVC原理8.iOS底层原理篇(六)----KVO初探持续更新中。。。。。...

2020-06-02 09:11:24 674

原创 iOS底层原理篇(六)----KVO初探

1.KVO简介键值观察是一种机制,它允许对象在其他对象的指定属性发生更改时得到通知。为了理解键值观察,必须首先理解键值编码。键值观察提供了一种机制,允许对象在其他对象的特定属性发生更改时得到通知。它对于应用程序中的模型层和控制器层之间的通信特别有用。控制器对象通常观察模型对象的属性,视图对象通过控制器观察模型对象的属性。此外,模型对象可以观察其他模型对象(通常用于确定依赖值何时发生变化),甚至可以观察自身(同样用于确定依赖值何时发生变化)。也可以观察属性,包括简单属性、对一关系和对多关系。对多关系的观

2020-06-01 11:01:20 230

原创 iOS底层原理篇(五)----KVC原理

1.简介先来看苹果文档的一段介绍:Key-value coding is a mechanism enabled by the NSKeyValueCoding informal protocol that objects adopt to provide indirect access to their properties. When an object is key-value coding compliant, its properties are addressable via string

2020-05-29 20:03:11 207

原创 iOS底层原理篇(四)----拓展、分类、关联对象

上篇博文底层原理篇(三)我们讲到了类的编译、链接、加载的过程,接下来我们去探索一下类与分类、拓展与分类、关联属性等的内容!1.类与分类

2020-01-20 11:30:21 554

原创 iOS底层原理篇(三)----类的编译、链接与加载

我们都知道,App启动时,代码中+(void)load方法早于main函数调用,main函数是我们程序的入口,那么我们程序在main函数之前,都做了些什么工作呢?今天我们一起去探讨一下main函数之前的流程!首先我们的应用程序,会依赖很多的库–被操作系统写入内存的可执行代码的二进制!库又有静态库如.a文件和动态库如.frameworkApp启动之后,main函数加载之前的过程:...

2020-01-14 17:03:57 826 2

原创 iOS有关Runtime的一个面试题

一般面试Runtime时,都会问这样一个问题:首先1/2/3/4均是对isKindOfClass,isMemberOfClass类方法的调用 + (BOOL)isKindOfClass:(Class)cls { for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) { ...

2019-12-30 15:31:37 506 1

原创 iOS底层原理篇(二)----类的缓存

接上篇文章:类的本质和底层实现,我们今天说一下类的缓存!先看一下上篇中类的结构图:在图中,我们看到 cache_t cache ,这是一个结构体,就是我们要说的缓存!那么我们的类在缓存里面存了些什么东西呢?接下来我们探索一下...

2019-12-29 23:26:41 248

原创 iOS底层原理篇(一)----类的本质和底层实现

iOS类的本质!

2019-12-24 11:20:24 677

原创 iOS 有关内存偏移的一个面试题

直接上图:打印结果:

2019-12-23 10:53:50 385

原创 iOS Runtime详解---动态方法决议与消息转发

我们上一篇文章讲过,通过方法编号sel找到方法实现imp,最后我们看到系统调用了这个方法:IMP lookUpImpOrForward(Class cls, SEL sel, id inst, bool initialize, bool cache, bool resolver)//在该方法的最后,系统进行了两次防crash的操作// No implementa...

2019-12-12 21:22:37 259

原创 iOS RunTime详解---源码分析

我们都知道,OC是基于运行时的一门语言,我们方法的调用等的工作,都是在运行时进行的,runtime底层源码经过编译,提供一套API接口供OC和FrameWork使用!今天,我们就去runtime的源码去一探究竟!...

2019-12-11 23:59:37 724

原创 Xcode11 创建新工程(删除Main.storyboard)

Xcode11升级之后,我们创建新项目时,会看到多了一个类SceneDelegate,从苹果官方文档看,程序声明周期交给了这个类来管理.如果我们默认使用SceneDelegate来进行生命周期管理,先看下面两张图:系统会根据info.plist中的选项来创建session,SceneDelegate来管理生命周期如果删除main.storyboard...

2019-12-05 10:02:45 1748

原创 iOS Xcode查看App启动时间

本着用户是上帝的宗旨,不能让用户觉得启动时有等待的感觉,我们需要对App启动时间进行优化。Xcode查看App启动时间:Edit scheme -> Run ->Arguments -> Environment Variables 中将环境变量 DYLD_PRINT_STATISTICS 设为 1,就可以看到 main 之前各个阶段的时间消耗改变环境变量DYLD_PRI...

2019-11-01 14:46:27 1816

原创 iOS iPhone XR 本地PDF展示空白页的解决

网络下载pdf文件并保存,使用WKWebView展示:NSURL *url = [NSURL fileURLWithPath:_localFilePath];NSURLRequest *request = [NSURLRequest requestWithURL:url];[self.webView loadRequest:request];只有机型iPhone XR有问题,展示白屏,使...

2019-11-01 14:14:44 2003

原创 iOS Runtime实用---万能控制器跳转

iOS开发过程中,我们会遇到控制器跳转的问题。几种情况:1.推送:根据服务器推送过来的信息,跳转不同控制器;2.首页轮播图:首页轮播图一般展示的信息都是各模块的精彩信息,跳转控制器一般都会有几种;3.还有一些奇葩的需求吧(哈哈),比如一个列表cell跳转不同控制器;这些需求,我们可以在移动端使用if else或者switch判断不同类型,实现跳转,但是想一想,是不是特别麻烦,肯定都有...

2019-10-29 16:01:56 274

原创 应试教育---幸好我们还有一张考卷

在中国,有一个名词叫“素质教育”,一提到这个词,很多人思维里面想到的就是国外教育如何人性化,多么注重学生的全面发展,例如美国!其实不然,在美国,根本没有“素质教育”这个概念!其实我觉得,美国教育的精髓在于尊重!在美国,高中开始就会有很多的社团(club),学生会根据自己的兴趣爱好选择加入一个或者多个社团,美国的父母不会逼迫孩子去参加某个社团,他们更多的是客观的让孩子看清自己面前的选项和自己的个性...

2019-10-25 11:33:56 291

原创 如何用HTTP实现长连接?

首先http中,没有长连接这样的类型。http要实现长连接,是建立在tcp协议的基础上的。一个http连接,等到不再需要该连接的时候,主动调用该连接的close()方法,才会关闭该连接。HTTP短连接:客户端和服务端进行一次HTTP请求/响应之后,就关闭连接。下一次的HTTP请求/响应操作需要重新建立。在首部字段中设置Connection:close,则在一次请求/响应之后,就会关闭连接...

2019-10-16 14:01:05 8077

原创 AFNetworking----源码分析浅谈

引言:iOS网络请求,在iOS7以前,使用NSURLConnection,随着iOS7的发布,出现了NSURLSession处理网络请求.我们开发中使用的三方SDK,如AFNetworking、SDWebImage等等都使用了NSURLSession,都是对其的封装!本文将从AFNetworking源码入手,简单的探索一下他的视线原理:(iOS小白,请多关照)...

2019-10-12 14:11:51 154

原创 OC字符串翻转

将一个字符串反序方式输出(完全翻转):- (NSString *)flipOverString:(NSString *)originStr { NSString *result = @""; for (NSInteger i = originStr.length -1; i >= 0; i--) { NSString *subStr = [originStr substrin...

2019-10-10 17:32:00 575

原创 iOS Runtime看这一篇就够了!!!

iOS 开发:『Runtime』详解(一)基础知识传送门iOS 开发:『Runtime』详解(二)Method Swizzling传送门iOS 开发:『Runtime』详解(三)Category 底层原理传送门iOS 开发:『Runtime』详解(四)获取类详细属性、方法传送门...

2019-09-25 13:25:42 173

原创 iOS 进度条

iOS开发中,我们经常使用进度条,首先我们会经常使用UIProgressView,系统的这个进度条高度不能定制,可设置背景颜色及跟踪颜色!有时候无法满足我们UI设计师的个人偏好(╯︵╰).我们来自定义几种进度条以在开发中满足他们的愿望!1.条形进度条WMProgressView.h文件 #import <UIKit/UIKit.h> NS_ASSUME_NONNU...

2019-09-20 10:03:11 2684 2

转载 iOS13生命周期改动

原文地址

2019-09-17 16:51:23 323

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除