- 博客(71)
- 收藏
- 关注
原创 iOS图像渲染 + 动画探索
Core Animation在每个run loop周期中自动开始一次新的事务(run loop是iOS负责收集用户输入,处理定时器或者网络事件并且重新绘制屏幕的东西),即使你不显式的用[CATransaction begin]开始一次事务,任何在一次run loop循环中属性的改变都会被集中起来,然后做一次0.25秒的动画。事务是通过CATransaction类来做管理,这个类的设计有些奇怪,不像你从它的命名预期的那样去管理一个简单的事务,而是管理了一叠你不能访问的事务。这也就诱发了离屏渲染。.......
2022-08-14 20:57:17 899 1
原创 [iOS开发]App启动过程
文章目录1.1 动态库和静态库的认识1.1.1 介绍1.1.2 静态库1.1.3 动态库1.2 Mach-O的简单认识ExecutableDylibBundleImage和Framework1.3 dyld的简单认识1.4 编译过程1.5 App启动过程总结知识点总结:启动过程总结:1.1 动态库和静态库的认识1.1.1 介绍从本质上,库是一种可执行代码的二进制形式。可以被操作系统载入内存执行。库分为两种:静态库(.a .lib)和动态库(framework .so .dll)。.a是纯二进制文件,
2021-11-25 18:12:18 550
原创 [iOS开发]iOS中的Hash
文章目录前言关联对象的底层原理weak的实现原理KVO的实现原理iOS App签名的原理对象引用计数存储的位置Runloop与线程的存储关系NSDictionary的原理哈希表哈希表定义哈希表优缺点哈希查找步骤哈希表的存储过程哈希表的实现负载因子 = 总键值对数/数组的个数哈希冲突的解决方法开散列闭散列再哈希法建立公共溢出区开闭散列二者的比较拉链法的优点:拉链法的缺点:线性探测法的缺点NSDictionary前言天天听安卓的同学整Hash,猛的发现iOS也有很多底层原理也是Hash来实现的,好好学一下。
2021-09-27 19:39:29 1312
原创 [iOS开发]网络请求合集
文章目录前言最原始的网络下载 -- NSData + NSURL方式NSURLConnection 和 NSURLSessionGET请求前言最近计算机网络该学习网络层的内容,想着自己把iOS中网络请求的部分好好复习一下以及看面经时的断点续传自己一直不知道怎么实现,所以统一来了解一下iOS开发中的网络下载方式包括NSData(最原始,实际开发基本不会用),NSURLConnection(古老又过气的苹果原生网络框架),NSURLSession(现在流行的苹果网络框架),AFNetworking,SD
2021-09-20 17:21:05 1377 1
原创 [iOS开发]iOS中相关锁
文章目录自旋锁:1. OSSpinLock2. os_unfair_lock互斥锁1. @synchronized锁作为一种非强制的机制,被用来保证线程安全。每一个线程在访问数据或者资源前,要先获取(Acquire)锁,并在访问结束之后释放(Release)锁。如果锁已经被占用,其它试图获取锁的线程会等待,直到锁重新可用注:不要将过多的其他操作代码放到锁里面,否则一个线程执行的时候另一个线程就一直在等待,就无法发挥多线程的作用了iOS中锁的基本种类只有两种:互斥锁、自旋锁,其他的可能比如:条件锁、递归
2021-09-14 18:05:47 461
原创 [iOS开发]UIKit
文章目录CALayer和UIView区别关系tableviewtableView遵循的两个delegatetableView复用机制tableView自适应高度AutoLayout自适应高度什么时候用tableview相比于scrollerView,tableview做了哪些别的操作给一个UIScrollerViw实现UITableView为什么不要频繁调用cell的属性collectionview协议执行顺序UIController的生命周期frame、boundsUIController和UIRespo
2021-08-18 21:41:08 542
原创 [iOS开发]NSTimer与循环引用的理解
文章目录问题引入循环引用简单理解的循环引用Block中的循环引用强弱共舞NSTimer创建NSTimer销毁NSTimerinvalidate与fireinvalidate与 = nil面试题如何解决NSTimer强持有的问题?中间的代理对象使用NSObject类实现消息转发使用NSProxy类实现消息转发改变timer引用在合适的地方调用invalidate方法NSTimer在runloop中我们有接触过,当时只是简单了解,NSTimer其实是很重要的一部分知识,我们需要好好了解一下这部分和循环引用部分
2021-08-16 20:16:53 512
原创 [iOS开发]Category、Extension和关联对象
文章目录什么是Category?分类和扩展Category的实质Category结构体从C++开始看起对象方法列表结构体类方法列表结构体协议列表结构体属性列表结构体category总结分类在运行期做了什么_objc_init_read_imagesaddUnattachedCategoryForClassremethodizeClassload方法和initialize方法load方法initialize关联对象什么是Category?Category是Objective-C 2.0之后添加的语言特性
2021-08-13 17:34:21 608
原创 [iOS开发]autoreleasePool
文章目录AutoreleasePoolPage的引入AutoreleasePoolPage的实现AutoreleasePoolPage的引入什么都没写,仅仅一个hello,world和一个autoreleasePool可以看到调用了PoolPush和PoolPop两个函数,对于看一下两个函数的实现void *objc_autoreleasePoolPush(void){ // 调用了AutoreleasePoolPage中的push方法 return AutoreleasePo
2021-08-11 17:29:27 328
原创 [iOS开发]Runloop
文章目录什么是RunLoop?默认情况下主线程的RunLoop原理RunLoop对象RunLoop对象的获取CFRunLoopRef源码部分(引入线程相关)RunLoop和线程RunLoop的相关类RunLoop中相关类的实现CFRunLoopModeRef五种运行模式CommonModesCFRunLoopSourceRefCFRunLoopTimerRef定时器滑动时不准确CFRunLoopObserverRefRunLoop的内部逻辑RunLoop回调实例测试NSTimer的使用ImageView延迟
2021-08-11 11:30:12 713
原创 [iOS开发]NSOperation、NSOperationQueue
文章目录简介概念了解基本使用创建操作使用子类NSInvocationOperation(Invocation:调用)使用子类NSBlockOperation使用自定义继承自NSOperation的子类重写main方法重写start方法创建队列将操作加入到队列中NSOperationQueue控制串行、并发NSOperation操作依赖NSOperation优先级NSOperation、NSOperationQueue线程间的通讯线程安全常用属性和方法NSOperationNSOperationQueue简
2021-08-08 17:34:24 493
转载 [iOS开发]pthread、NSThread
文章目录pthreadNSThread创建、启动线程线程的相关用法线程状态控制方法线程之间的通讯线程安全pthreadpthread是一套通用的多线程API,可以在Unix/Linux/Windows等系统跨平台使用。使用C语言编写,需要程序员自己管理线程的生命周期,使用难度比极大,我们在iOS开发中几乎不适用pthread,但是我们可以来了解一下。头文件#import <pthread.h>创建线程,并开启线程执行任务pthread_create()创建一个线程pthread_
2021-08-07 16:56:50 351 1
原创 [iOS开发]iOS持久化
文章目录沙盒机制持久化数据存储的方式XML属性列表(plist)Preferences偏好设置(UserDefaults)NSKeyedArchiver归档通过SQlite或CoreData保存在对象数据集沙盒机制之前在真机测试查找录音文件的时候我们已经有了解过沙盒机制// 获取沙盒根目录路径 NSString *homeDir = NSHomeDirectory();Documents存放的是app数据库文件在 iOS11 以后新增了一个 文件 APP,集中管理 iOS 上应用内创
2021-08-07 09:45:06 368 1
原创 [iOS开发]单例模式\通知\代理
文章目录单例模式什么是单例模式单例模式的优缺点优点:缺点:实现方式懒汉式饿汉式单例模式什么是单例模式单例模式在整个工程中,相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你在多少个洁面中初始化调用了这个单例方法取得对象,它们所有的对象都是指向的同一块内存的存储空间(即单例类保证了该类的实例对象是唯一存在的一个)单例模式的优缺点优点:单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约
2021-08-06 09:18:19 326
原创 [iOS开发]KVO+KVC
文章目录KVO什么是KVOKVO的基本使用手动调用KVOKVO的本质NSKVONotifying_Person内部实现setter的实现不同KVO部分相关问题KVC什么是KVC基础操作多级访问传参nil处理非对象KVC获取值的过程setValue:forKeyvalueForKeyKVC操作使用场景动态的取值和设值多值操作用KVC来访问和修改私有变量修改一些控件的内部属性KVO什么是KVOKVO全称Key Value Observing,其是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的
2021-08-05 20:21:30 433
原创 [iOS开发]GCD
文章目录GCD简介我们为什么要使用GCD呢GCD任务和队列任务队列GCD使用步骤队列的创建方法 / 获取方法任务的创建方法任务和队列不同组合方式的区别队列嵌套情况下,不同组合的区别关于不同队列和不同任务的理解GCD的基本使用同步+并发异步+并发同步+串行异步+串行同步+主队列在其他线程中调用同步+主队列异步+主队列GCD其他方法栅栏方法:dispatch_barrier_async延时执行方法:dispatch_after一次性代码(只执行一次):dispatch_once快速迭代方法:dispatch_a
2021-08-03 20:45:27 550 1
原创 [iOS开发]weak底层原理
文章目录weak表实现原理结论Retain、release复习SideTablespinlock_t slock 自旋锁锁分离锁、拆分锁自旋锁苹果的选择RefcountMapweak_table_t weak_table构造和析构函数最后是锁的操作小小总结一下SideTableweak部分objc_initWeakweak_register_no_lock将新的weak指针添加到弱引用表weak_entry_for_referent取元素append_referrer添加元素weak_unregister_
2021-07-31 10:23:51 1105 1
原创 [iOS开发]属性关键字
文章目录@property关键字原子相关操作atomicnonatomic读写权限setter相关修饰符retain和strongassign、weak、unsafe_unretainstrong、copy@property@property关键字可以自动生成某个成员变量的setter和getter方法的声明@synthesize关键字会指定一个以下划线 ( _ ) 为前缀,加上属性名的成员变量。并且由编译器自动进行该属性setter和getter方法的实现@dynamic关键字,编译器就不会为上
2021-07-29 14:33:36 348
原创 [iOS开发]Block
文章目录Block概要规范什么是Blocks?Block语法格式标准格式省略格式Block变量截获自动变量__block说明符截获的自动变量Block的循环引用Block的实现正常的Block流程初始化Block部分调用部分Block的实质总结Block的类型Block有三种类型NSGlobalBlockNSStackBlockNSMallocBlock拷贝情况Block截获变量局部变量的例子直接访问局部变量通过传值间接访问局部变量static修饰变量const修饰变量总结Block截获对象__block修
2021-07-27 21:18:36 486 2
原创 [iOS开发]消息传递和消息转发机制
文章目录消息传递机制的学习选择子SELobjc_msgSend()的执行流程消息发送阶段动态解析阶段动态解析阶段流程动态解析测试消息转发阶段消息转发流程消息转发测试总结消息传递机制的学习之前有写过这个机制的学习,第十一条effectiveOC2.0阅读笔记(二对象\消息\运行期)在对象上调用方法,术语就叫做传递消息,消息有名称和选择器(方法),可以接受参数,还可能有返回值。在很多语言,比如 C ,调用一个方法其实就是跳到内存中的某一点并开始执行一段代码。没有任何动态的特性,因为这在编译时就决定好了
2021-07-25 14:59:29 536 4
原创 [iOS开发]runtime中基本结构体及OC对象底层探索
文章目录类与对象类和对象的本质对象部分类部分isa详解isa_t的初始化assert()函数初始化过程class方法class_rw_t和class_ro_t流程总结cache_tproperty总结遇到的问题三个问题先放前面一个NSObject对象占用多少内存?对象的isa指针指向哪里?OC的类信息存放在哪里?在了解过后我们应该就会对这三个问题的答案有数了类与对象类和对象的本质对象部分OC的类和对象本质上都是结构体,在编译时都会以结构体的形式被编译到二进制中。直接干源码关于对象的
2021-07-23 16:44:55 336 5
原创 [iOS开发]ARC
文章目录内存管理四大原则ARC规则__strong修饰符对象的所有者和对象的生命周期__strong对象相互赋值方法参数中使用__strong__strong导致的循环引用失效阶段的表示__weak修饰符__weak修饰符的引用计数的问题__unsafe_unretained为什么说是不安全呢__autoreleasing修饰符与MRC进行比较自动调用自动调用时的失效过程weak修饰符与autoreleasing修饰符具体ARC规则规则不要显式调用dealloc__bridge属性关键字与所有权修饰符ARC
2021-07-18 22:15:29 722 7
原创 [iOS开发]引用计数与MRC
文章目录1. 内存分配区域1.1 内区1.1.1 栈1.1.2 堆1.1.3 全局区1.1.3.1 static静态变量1.1.3.2 extern全局变量1.1.3.3 const常量1.1.4 常量区1.1.5 代码区1.2 外区--自由存储区再了解内存管理这块知识,我认为有必要先了解一下计算机是如何处理内存的1. 内存分配区域我们可以简单的将内存区域分为内区和外区1.1 内区1.1.1 栈临时变量由编译器自动分配,在不需要时自动清除的变量存储区,通常是局部变量和函数参数。在一个进程中,位于
2021-06-20 21:55:33 393 2
原创 [iOS开发]简单工厂模式/工厂方法模式/抽象工厂模式
文章目录设计模式的三大原则工厂的三种设计模式简单工厂模式(Simple Factory Pattern)优点缺点代码例子:工厂方法模式(Factory Method Pattern)什么时候使用?优势源代码抽象工厂模式(Abstract Factory Pattern)代码示例设计模式的三大原则单一职责原则。通俗地讲就是一个类只做一件事CALayer:动画和视图的显示。UIView:只负责事件传递、事件响应。开闭原则。对修改关闭,对扩展开放。要考虑到后续的扩展性,而不是在原有的基础上来回修改
2021-06-09 21:06:18 630 3
原创 [iOS开发]NSString的三种类型管理方式
文章目录参考博客问题发现:__NSCFConstantString__NSCFStringNSTaggedPointerString标签指针的概念NSString的深浅复制问题参考博客NSString的内存管理iOS里的TaggedPointer[NSString篇]问题发现: NSString *firstString = @"helloworld"; NSString *secondString = [NSString stringWithFormat:@"helloworld"];
2021-05-28 18:08:12 861 1
原创 [iOS开发]SDWebImage的实现机制及源码分析(未完
文章目录SDWebImage的主要功能以及一些知识点主要功能下载缓存内存缓存磁盘缓存相关知识点dispatch_barrier_sync函数NSMutableURLRequestNSOperation 及 NSOperationQueueNSURLConnectionNSCache 类清理缓存图片的策略:对图片的解压缩操作:异步下载解决图片错位问题,需要判定 cell 对应的图片地址已经改变如何给imageView 绑定下载地址SDWebImage下载的流程使用流程SDWebImage的主要功能以及一些知
2021-05-20 18:24:35 785 4
原创 [iOS开发]事件处理与响应者链
文章目录前言一些新概念UIKit框架响应链响应者UIResponder、UIEvent 和 UIControl的介绍、联系与区别UIResponderUIEventUIControl事件的产生、传递和响应过程传递过程hit-TesthitTest:withEvent:方法处理流程:hit-Test内部实现响应过程(响应者链)前言Apple官方文档《Event Handling Guide for iOS》外加一张最近看到的继承关系的图一些新概念UIKit框架UIKit框架提供一系列的Class
2021-04-28 16:45:10 419 1
原创 [iOS开发]TableviewCell复用机制学习
文章目录)前言对象池设计模式cell的注册与不注册的情况的区别官方文档中对于这两种方法的解释总结cell的复用问题通常情况下理解的概念:遇到的问题:结论一些小tips前言去年11月自己写学习过这个部分的内容,但是不仅有错误,自己理解也不好,现在想要对于tableView的复用机制进行详细的学习,中间遇到了不少问题,索性整理了一篇博客对象池设计模式重学设计模式 - Object Pool模式GoF著作中未提到的设计模式(5):Object PoolUITableViewCell的复用机制并非什么黑
2021-04-23 21:28:07 975
原创 [iOS开发]Instruments工具的学习
文章目录Instruments 的介绍Instrument 能为我们提供什么?常用工具:Leaks工具的使用为什么要使用Leaks工具?使用步骤检测是否有泄漏定位修改Leaks界面分析Call Tree的四个选项:开启ARC后,内存泄漏的原因Time Profiler 工具的使用为什么要使用Time Profiler 工具?使用步骤Call Tree Constraints总结Instruments 的介绍Instruments 是一个很灵活的、强大的工具;是性能分析、动态跟踪 和分析 OS X 以及
2021-04-14 17:43:45 1572
原创 [iOS开发]修改代码问题记录
1. Tabbar的文字、图片的位置更改再加图片后 我们应该先尝试给tabbar添加合适的title以及image 避免在自己的页面添加 如果在自己的页面viewdidload添加也可以 不过在视图控制器初次创建时需要先创建一下这个页面 就比如我们可以这样先加个背景颜色的调用 这样默认就会先会跑自己的viewdidload里面的代码 这也能保证viewdidload里的代码能正常运行,创建对应的title和image2.修改frame为masonry的一个小问题上面是masonry 下面对这个进
2021-04-09 20:04:31 262 1
原创 [iOS开发]AVAudioRecorder真机录音文件保存不全解决办法
IOS开发实现录音功能文章目录起因:录音功能在真机无法运行第一步:使用了两个不同的真机 权限一样 所以权限原因被排除第二步:如何查询程序在真机中的缓存文件?第三步:现在已经知道是录音文件的问题 那么如何解决这个问题呢?之前写过博客录音功能的实现,之前在模拟机可以正常运行,今天想在真机进行调试时发现录音功能有问题。为了改这个bug也学到了一些东西,决定记录一下。起因:录音功能在真机无法运行首先想到的是我想看一下自己保存的录音文件是否有真正录到声音,是保存文件有问题,或是真机权限问题,还是语音识别的.
2021-04-07 17:23:37 741
转载 [iOS开发]动画 animationwithkeypath如何知道有哪些值
transform.scale = 比例轉換transform.scale.x = 闊的比例轉換transform.scale.y = 高的比例轉換transform.rotation.z = 平面圖的旋轉opacity = 透明度margin = 布局zPosition = 翻转backgroundColor = 背景颜色cornerRadius = 圆角borderWidth = 边框宽bounds = 大小contents = 内容contentsRect = 内容大小cor
2021-03-31 15:10:09 159
原创 effective OC2.0 阅读笔记 (三 接口与API设计)
第15条:用前缀避免命名空间冲突为什么要避免命名空间冲突?Objective-C没有其他语言那种内置的命名空间 (namespace) 机制.在应用开发时,所有的代码和引用的静态库最终都会被编译到同一个域和二进制中。这样的后果是一旦我们有重复的类名的话,就会导致编译时的冲突和失败。避免命名冲突变相实现命名空间:为所有名称都加上适当前缀。使用Cocoa创建应用程序时一定要注意,Apple宣称其保留使用所有“两字母前缀”(two-letter-prefix)的权利,所以我们选用的前缀最好是三个字母的
2021-03-11 21:47:52 178
原创 [iOS开发]类,父类,元类的关系总结
类的定义类在OC中其实是一个指向objc_class的结构体指针,结构体的构造为:typedef struct objc_class *Class; struct objc_class { Class isa; Class super_class; const char *name; long version; long info; long instance_size; struct objc_ivar_list
2021-03-10 21:51:49 764
原创 操作系统-进程的描述
进程的概念进程的定义、描述和分类进程引入的原因为了可以使程序能够并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了进程这个概念。进程的定义进程控制块(PCB):为了可以使并发参与执行的每个程序(含数据)都能够独立运行,在操作系统中必须为之匹配一个专门的数据结构,我们称之为进程控制块(Process Control Block,PCB),系统利用PCB来描述进程的基本情况好活动过程。进程实体 :由程序段,相关数据段和PCB三部分就组成了进程实体(进程映像),一般情况下,我们把进程实体简
2021-03-10 17:17:59 206
原创 effectiveOC2.0阅读笔记(二对象\消息\运行期)
面向对象语言编程时,“对象”(object)就是“基本构造单元”,开发者可以通过对象来储存并传递数据。在对象之间传递数据并执行任务的过程就叫做“消息传递”。当应用程序运行起来以后,为其提供相关支持的代码叫做“Objective-C运行期环境”,它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑。第六条:理解"属性"这一概念属性是OC的一种特性,用于封装对象中的数据。OC对象通常会把其所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(
2021-03-04 22:21:04 518 3
原创 effective OC2.0 阅读笔记 (一 熟悉Objective-C)
第一条:了解Objective-C语言的起源Objective-C从Smalltalk语言是从Smalltalk语言演化而来,Smalltalk是消息语言的鼻祖。所有的OC语言的对象都必须这样:NSString *someString = @"The string"; 因为对象所占内存总是分配在“堆空间(heap space)”中,而绝不会分配在"栈(stack)上"。不能像这样:NSString stackString; 分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存则会在其栈帧弹出时
2021-03-02 20:18:35 304 1
原创 effective OC2.0 阅读笔记(四 协议与分类)
第23条:通过委托与数据源协议进行对象间通信这条讲的也比较基础,就是基本的delegate,protocal使用。要点委托模式的主旨是定义一套接口,某对象若想接受另一个对象的委托,则需遵从此接口,以便成为其“委托对象(delegate)”。将委托对象应该支持的接口定义成协议,在协议中把可能需要处理的事件定义成方法。委托模式可将数据与业务逻辑解偶。视图对象的属性中,可以包含负责数据和事件处理的对象。这两种对象分别称为“数据源”(data source) 和 委托"delegate"。又例如:当
2021-02-21 17:16:10 252 3
原创 [iOS开发]常用弹窗总结
最近写项目 对各种各样的弹窗搞的有点头疼,于是决定总结一下常用的弹窗弹窗是什么?弹框是人机交互中常见的方式,常常出现于询问、警示以及完成某个插入任务,常见于网页端及移动端。弹框能使用户有效聚焦于当前最紧急的信息,也可以在不用离开当前页面的前提下,完成一些轻量的任务。弹窗都有哪些分类?模态弹窗关于模态,官方文档中说明:模态视图突出焦点,因为用户只有在完成当前的任务或关闭一个信息或视图之后才能去做其它事情。 当屏幕上出现一个模态视图时,用户必须采取一个决定(点击按钮或是其它)才能退出模态化体验。一个
2021-01-23 21:56:44 4213
原创 [iOS开发]Cell的四种style
首先我们看官方文档介绍 Default,// Simple cell with text label and optional image view (behavior of UITableViewCell in iPhoneOS 2.x) Value1, // Left aligned label on left and right aligned label on right with blue text (Used in Settings) Value
2020-12-14 20:01:45 612
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人