
iOS
文章平均质量分 83
晨光_
不做便不做 做了就深做 做好
展开
-
一个iOS开发 2020 疫情之下 失业找工作的前前后后
失业之前2020年的疫情让无数行业受到了冲击,但是我的失业似乎跟这次疫情的关系并不是很大。2020年2月24号下午,这一天我永远忘不了,这个时候的我还在家里封闭着,凡是可以出去的路都被堵的连电动车都过不了。2月17日 伴随着杭州第一批公司复工了。我的老东家开了第一次全体员工视频会议,我都有点不好意思参加这次视频会议,因为我所在的项目在会议上只字未提。心里已经隐隐感觉到了什么,会议结束后看着满脸...原创 2020-04-29 18:23:26 · 2436 阅读 · 1 评论 -
ReactiveObjC 基本使用总结
本篇博客主要分析RAC 的基本使用 关于原理部分这里不再写,后边分析源码时会将相应的分析体会再做整理信号产生 订阅 发送形式 1- (void)testSignalSend{ // 创建 RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> ...原创 2020-04-26 17:49:46 · 253 阅读 · 0 评论 -
flutter 之 布局学习
前言flutter 中的布局常用的有 Container Row Column Static 等 有了这些 基本上都能搭配出不同的UI界面了 今天来逐一介绍Container flutter 中的UIViewclass LayoutDemo extends StatelessWidget { @override Widget build(BuildContext context) {...原创 2020-04-09 15:20:27 · 169 阅读 · 0 评论 -
iOS block 总结
一、block 分类block 常规使用下 分为 全局 堆 栈 但是还有系统级别的3种 所以有六种全局blok void(^block)(void) = ^{ }; block(); NSLog(@"---block---%@",block);// <__NSGlobalBlock__: 0x1000c8190>堆区 int...原创 2020-03-09 16:19:22 · 198 阅读 · 0 评论 -
iOS 之 锁总结
一、 iOS 中常用的锁实现方式锁分为 互斥锁(递归锁和非递归锁) 和 自旋锁(忙等) iOS中的锁都是对pthread的封装。@synchronized (self) 通过断点调试 看汇编 发现调用如下两个方法 objc_sync_enter、objc_sync_exit。源码实现如下int objc_sync_enter(id obj){ int result = OB...原创 2020-03-06 12:42:11 · 200 阅读 · 0 评论 -
多线程之GCD探索
一、多线程理解进程是操作系统的最小执行单元,线程是进程执行的最小单元,iOS是单进程,多线程执行的,进程之间资源不共享。多线程可以提高程序的执行效率,其实是提高了资源的利用率,对于单核CPU来讲,通过在不同任务之间切换来达到任务同时执行的假象,对于多核CPU来讲 才是真正的并发。GCD 正是充分的利用了多核cpu二、GCDgrand central dispatch 自动管理线程的生命...原创 2020-02-28 09:35:43 · 175 阅读 · 0 评论 -
KVO原理探究
一、初步探索简单使用准备工作@interface People : NSObject@property(nonatomic, copy)NSString *name;@property(nonatomic, copy)NSString *nickName;@endstatic void *PeopleNameContext = "PeopleName";self.p = [P...原创 2020-02-18 13:54:54 · 137 阅读 · 0 评论 -
iOS 类的加载过程
前言在我们的程序的main函数执行前,系统给我们做了那些事儿,编译阶段:词法分析、语法分析、语义分析、生成中间代码IR 目标代码优化、生成汇编、然后连接器进行静态链接,把未绑定的符号进行绑定。运行阶段: dyld 动态链接将动态库进行绑定 例如System、UIKit、lidispatch,今天从_objc_init开始分析方法调用链 最后会到_read_images _dyld_obj...原创 2020-01-09 22:52:52 · 947 阅读 · 0 评论 -
iOS 方法查找流程探索总结
断点调试找方法断点调试创建People 类对象调用方法 按住control键一步步调试 最后会发现如下图所示 这里会调用objc_msgSend继续按下control 往下走 回来到 接下来就看看_class_lookupMethodAndLoadCache3的方法实现_class_lookupMethodAndLoadCache3IMP _class_lookupMethodAnd...原创 2019-12-29 15:15:30 · 612 阅读 · 0 评论 -
iOS 方法缓存探索
iOS 中类的结构struct objc_class : objc_object { // Class ISA; Class superclass; cache_t cache; // formerly cache pointer and vtable class_data_bits_t bits; }从上述代码中我们发现了一个 c...原创 2019-12-25 14:53:50 · 224 阅读 · 0 评论 -
iOS isa指针初始化过程 & 类结构探索
isa 指针各位域所指代含义union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bits;#if defined(ISA_BITFIELD) struct { uintptr_t nonpointer ...原创 2019-12-22 13:57:45 · 417 阅读 · 0 评论 -
iOS 对象所需内存和系统实际开辟内存详解
开始探索新建People类 任何属性都不加@interface People : NSObject@end创建对象People *p = [[People alloc]init];NSLog(@"---class_getInstanceSize--%ld",class_getInstanceSize(p.class));// 8这个时候是因为每个类或者类对象都有一个isa指针...原创 2019-12-18 00:16:47 · 523 阅读 · 0 评论 -
SDWebImage探索二 自己实现轻量级图片缓存
简介通过对SDWebImage源码的阅读,就尝试着自己封装一个轻量级的图片加载类。那么在开发的过程中遇到了几个问题UITableView上加载图片怎么做到不卡贞的如何解决图片重用问题的NSOperation 是如何使用的架构层面该如何设计下面我们就带着这些问题来一点一点写代码声明一个UIImageView 的类别UIImageView+XBWebCache- (void)xb...原创 2019-11-23 17:20:01 · 229 阅读 · 0 评论 -
iOS runtime初探和总结
内存分布程序运行内存分为5大部分 堆、栈、初始化变量区、未初始化变量区、代码区栈:存放指针地址堆:存放真实的对象查找过程: 先通过栈区找到指针 再通过指针找到堆上真实的对象类对象、实例对象、元类类在runtime中的样子 是一个类的结构体struct objc_class { Class _Nonnull isa OBJC_ISA_AVAILABILITY;#if !_...原创 2019-11-10 11:14:55 · 162 阅读 · 0 评论 -
SDWebImage 原理解析及核心代码分析
简介SDWebImage 是一个非常强大的图片加载框架,从一开始工作都在用它,都知道他是先内存检查 再磁盘检查 都没有最后才走网络下载,那么他实现的代码究竟是什么逻辑呢,今天我们就来分析他的核心代码。主讲5个类UIImageView+WebCache.hUIView+WebCache.hUIView+WebCacheOperation.hSDWebImageManager.hSDW...原创 2019-11-07 09:50:22 · 548 阅读 · 0 评论 -
iOS AVPlayer 使用总结
简介iOS 中视频播放自定义能力最强的就是 AVPlayer,今天主要就介绍 AVPlayer使用的核心流程和代码。三个关键类 AVPlayerItem AVPlayer AVPlayerLayer这是AVPlayer播放视频的核心三个类,apple 按照MVC的模式封装了视频播放的整个逻辑,AVPlayerItem 是 Model层 AVPlayer 是C 控制层 AVPlayerLay...原创 2019-11-04 13:19:39 · 2249 阅读 · 0 评论 -
KVC详细使用总结 以及异常处理和特殊用法
前言简单来说KVC 就是通过如下方式进行间接设置和获取值的 People *p = [[People alloc]init]; [p setValue:@"xiaobing" forKey:@"name"]; [p setValue:<#(nullable id)#> forKeyPath:<#(nonnull NSString *)#>]; [...原创 2019-10-17 14:26:14 · 560 阅读 · 0 评论 -
CTMediator 学习使用总结
先来看看 NSMethodSignature 和 NSInvocation假设现在有一个方法 -(NSString *)school:(NSString *)name time:(NSInteger)t{ NSString *result = [NSString stringWithFormat:@"%@%d",name,t]; NSLog(@"---result-----%...原创 2019-04-13 11:42:13 · 2801 阅读 · 0 评论 -
AFNetworking之一个get请求是如何发出和接收数据的
前言做一个iOS 开发多年,看源码的次数很少,最近一两年进步比较大,由于公司的需要现在在做AI,接触的人群变了,能力也提高了,回过头来看常用iOS 框架源码感觉也没那么吃力了,今天就将最近对AFNetworking的分析写出来。先来看看原生网络请求是怎么做的***片段1***NSURL *url = [NSURL URLWithString:@"一个你自己可以访问的网络链接"]; ...原创 2019-04-22 13:33:57 · 565 阅读 · 0 评论 -
iOS 基于PhotoKit 获取系统所有相册 以及所有照片 包括iCloud的处理 细节详解及实战代码
前言最近在做一个相册的项目,一开始觉得项目没什么难度,可是真正上手做了之后,发现难度不小,苹果新推出Photokit之后,获取相册中图片对象是快的,可是在获取到具体图片个人实战比较慢,同时还有icloud的问题,那么本片博客就带你一起解决这些问题。第一步 获取系统所有相册import Photosprivate var allAsset:[PHAsset] = [] //相册中所有的照片...原创 2019-08-03 11:05:45 · 5695 阅读 · 3 评论 -
iOS FMDB之FMDatabaseQueue的使用总结
前言最近项目中使用到 FMDatabaseQueue ,很久没有用过了,最近踩了不少坑,今天把它整理出来。个人觉得手机端处理这种数据库,还是麻烦的,调试起来非常麻烦,所以还是按照规范 一点一点写数据库代码,少走弯路。第一步创建数据库private var databaseQueue:FMDatabaseQueue = FMDatabaseQueue(path:pathName)!此处可以...原创 2019-08-03 11:48:36 · 742 阅读 · 0 评论 -
AutoLayout 之 读一读Masonry的源码
AutoLayout 之 读一读Masonry的源码第一次写博客 怀着一颗认真的心 开始Masonry 是如何实现链式调用的先看一段代码UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 100)]; bgView.backgroundColor = [UIColor redColor];...原创 2019-03-30 13:36:03 · 167 阅读 · 0 评论