自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 收藏
  • 关注

原创 【iOS RunLoop】

RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来,而在没有工作的时候让线程进入休眠状态。之所以iOS的app能够持续的响应从而让程序保持运行状态,在于其存在一个事件循环机制: 线程能够随时响应并处理事件的机制,这种机制要求线程不能退出从而高效的完成事件调度和处理。在iOS这种事件循环机制就叫做RunLoop。

2023-08-03 11:47:41 2111

原创 【iOS】多线程 & 锁问题总结

iOS 锁和多线程的总结。

2023-08-01 21:48:06 1871

原创 【iOS】KVC &KVO 总结

KVO的全称是: 键值监听,可以用于监听某个对象属性值的改变;KVO时苹果提供的一套事件通知机制,KVO和都是iOS观察者模式的实现。区别:可以存在一对多,而KVO则是 一对一的 关系。利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类当修改instance对象的属性时,会调用Foundation的函数接着调用父类原来的setter方法修改属性的值。最后调用,其内部会触发监听器(Oberser)的监听方法调用调用的时候,会。

2023-07-29 11:23:45 1344

原创 【iOS】Frame与Bounds的区别详解

frame不管对于位置还是大小,改变的都是自己本身。frame的位置是以父视图的坐标系为参照,从而确定当前视图在父视图中的位置。frame的大小改变时,当前视图的左上角位置不会发生改变,只是大小发生改变。bounds改变位置时,改变的是子视图的位置,自身没有影响;其实就是改变了本身的坐标系原点,默认本身坐标系的原点是左上角。bounds的大小改变时,当前视图的中心点不会发生改变,当前视图的大小发生改变,看起来效果就想缩放一样。frame和bounds详解。

2023-07-27 17:23:26 1489

原创 【iOS】iOS持久化

iOS中的沙盒机制是一种安全体系。为了保证系统安全,iOS每个应用程序在安装时,会创建属于自己的沙盒文件(存储空间)。应用程序只能访问自身的沙盒文件,不能访问其他应用程序的沙盒文件,当应用程序需要向外部请求或接收数据时,都需要经过权限认证,否则,无法获取到数据。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。

2023-07-27 11:57:30 1117

原创 【iOS-weak底层原理】

weak的原理在于底层维护了一张结构的hash表,key是所指对象的地址,value是weak指针的地址数组。weak关键字的作用是弱引用,所引用对象的计数器不会加1,并在引用对象被释放的时候自动被设置为nil。对象释放时,调用函数根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。文章中介绍了这样三个结构,它们之间的关系如下图所示。

2023-07-25 23:07:01 274

原创 【OC总结 属性关键字】

属性关键字就是用来修饰属性的关键字,保证了程序的正常运行。浅拷贝和深拷贝的区别?浅拷贝只是对 内存地址的复制,两个指针指向同一个地址,增加被拷贝对象的引用计数,没有发生新的内存分配。深拷贝:目标对象指针和源对象指针,指向两片内容相同的内存空间。2个特点:不会增加被拷贝对象的引用计数,产生了新内存分配,出现了2块内存。总结区别:浅拷贝增加引用计数,不产生新的内存。深拷贝不增加引用计数,会新分配内存copy关键字影响了对象的可变和不可变属性吗?

2023-07-25 15:07:54 355

原创 【OC总结 面向对象 + 内存管理 + runtime】

面向对象 + 内存管理. + runtime总结 后续随时补充,总结为主,省略了一些源码实现runtime-运行时,是iOS系统的核心,它的本质是一套底层的C语言API。runtime将一些工作放在代码运行的时候才处理而非编译时为 Objective-C 语言的动态属性提供支持,所以很多的类和成员在我们编译的时候是不知道的,在运行时,所编写的代码会转换成完整的确定的代码运行。Apple - Objective-C 运行时。

2023-07-20 10:47:09 321

原创 【iOS- Block总结】

博客以总结为主,随时更新block();} return 0;可以正确执行,因为在block块中仅仅是使用了array的内存地址,往内存地址中添加内容,并没有修改arry的内存地址,因此array不需要使用__block修饰也可以正确编译。‼️因此当仅仅是使用局部变量的内存地址,而不是修改的时候,尽量不要添加__block,通过上述分析我们知道一旦添加了__block修饰符,系统会自动创建相应的结构体,占用不必要的内存空间。Block本质是一个对象,使用结构体实现。

2023-07-19 20:55:38 1178

原创 【iOS内存管理-编译链接 & 动态链接器】

iOS开发的过程中接触到的编译链接方面的知识很少,这部分知识还是很重要的。对于iOS的编译链接过程来说并不难,和微机原理的汇编过程还是挺像的。今天对于编译链接的过程学习和了解一下。iOS程序员的自我修养-编译、链接过程iOS编译过程编译链接是一iOS文件从开始到变成可执行的文件的过程,我们不去研究原理,但是对于整个流程的掌握还是很有必要的。

2023-07-15 11:35:14 816

原创 【iOS内存管理-内存的几大区域】

栈是从高地址向低地址存储的一块连续的内存区域,特点是先进后出(FILO)栈的地址空间在在iOS里面是0X7/ 0X16开头栈区一般是在运行时分配内存,内存空间由系统管理,也就是变量在超出了自身的作用范围之后就会被释放。包含函数内部定义的局部变量以及方法参数(方法的默认参数 self,cmd)等也都是存放在栈区。初步了解了iOS的内存区域,主要是栈和堆的区别和联系需要我们了然于心。

2023-07-14 21:28:05 1159

原创 【OC底层_消息发送与转发机制原理】

OC一直以来被称为动态语言,Objective-C 是一门动态的语言,在学习KVO和KVC的时候就能理解一些了,当然不单单是因为这个特质,OC还具有动态绑定动态类型等特点,接下来学习的消息传递和消息转发机制就能深刻的体会这些特别的动态特点。简单理解一下动态绑定和动态类型的意思当在对象上调用方法在Objective-C里面非常普遍,这个就叫给某个对象发送消息,消息有名称或者选择子这个说法,消息也不单单可以接受参数,还可以有返回值。

2023-06-25 16:21:36 1114 1

原创 【iOS_Swift_Alamofire实现网络请求】

学习swift继续延续之前的思路,对照着OC学,从UI起手,学习到对应的自适应布局。今天再次学习了swift的原生网络请求和对应的第三方库-Alamofire。和AFN库一样使用起来简单快捷,swift的语言特性安全在很多处都会体现,接下来会学习swift的原声json Model解析库。

2023-06-08 22:58:12 2838 2

原创 【Swift基础语法&SnapKit自动布局库的使用】

最近在学习swift和写项目,给我的感受,语言简洁和安全,在学习了基础的语法和一些必要的知识之后,因为OC的UI也用到了自动布局,所以也去探索了swift的自动布局库SnapKit,简单记录一下。swift的字典和数组,元组在写项目的时候感觉没有用到很多,字典那块的问题好像还挺多的,包括如何多层读取不报错,和OC还是有区别,研究了再来总结。

2023-06-08 00:37:57 997 1

原创 【iOS底层探索- Block原理分析-循环引用】

Block循环引用

2023-06-01 22:28:58 1203 1

原创 【iOS开发-多线程【四】pthread&NSThread

pthread 是一套通用的多线程的 API,可以在Unix / Linux / Windows 等系统跨平台使用,使用 C 语言编写,需要程序员自己管理线程的生命周期,使用难度较大,我们在 iOS 开发中几乎不使用 pthread。POSIXPOSIXThreads,常被缩写 为Pthreads)是POSIX的线程标准,定义了创建和操纵线程的一套 API。实现POSIX线程标准的库常被称作Pthreads,一般用于系统,如LinuxSolaris。

2023-05-27 19:58:26 971

原创 【iOS锁_@synchronized源码浅析】

继续iOS锁的学习。在这里深入的学习的实现过程。结构所做的事情跟锁(lock)类似:它防止不同的线程同时执行同一段代码。但在某些情况下,相比于使用 NSLock 创建锁对象、加锁和解锁来说,用着更方便,可读性更高。但并不是在任意场景下都能使用,且它的性能较低。用法使用@synchronized指令指令是在Objective-C代码中实时创建互斥锁的便捷方式。指令会做任何其他互斥锁都会做的事情——它防止不同的线程同时获取相同的锁。然而,在这种情况下,您不必直接创建互斥量或锁定对象。

2023-05-26 09:22:59 1458

原创 【iOS_锁】

在iOS开发里面,锁住要是为了保护共享资源的访问确保线程安全性和避免竞争条件。iOS的应用通常在多线程的环境下运行,之前学习的多线程GCD和Operation Queue都是执行并发任务的,多个线程可能同时访问某个对象,所以锁可以确保每次只有一个线程能够修改或访问共享资源,保护了数据的安全,避免了资源冲突。

2023-05-24 22:39:04 1036 3

原创 [iOS开发]<多线程【三】-NSOperation&操作队列NSOperationQueue>

NSInvocationOperation、NSBlockOperation 不能满足日常需求,我们可以使用自定义继承自 NSOperation 的子类。可以通过重写 main 或者 start 方法 来定义自己的 NSOperation 对象。重写main方法比较简单,我们不需要管理操作的状态属性 isExecuting 和 isFinished。当 main 执行完返回的时候,这个操作就结束了。先定义一个继承自 NSOperation 的子类,重写main方法。if(!

2023-05-21 19:00:00 675

原创 【AFNetWorking源码一】

源码库第二篇。这个框架是iOS必备的一个第三方框架,其高效简洁的API使其成为最好的iOS网络请求框架,也让iOS开发的网络请求轻松许多,对于原生的GET和POST请求,这个框架提供了更方便的方法帮助了客户端和服务端的交互。本次学习是基于AFNetworking4.0库,相比于3.0添加了请求头,因为在写项目的时候也发现不论是自己后端或者原生的后台API都需要写请求头这个东西。请求头是在HTTP请求中包含的一部分信息,用于向服务器传递关于请求的额外信息和参数。至此,对于初始化的时候获取当前。

2023-05-17 22:45:32 631

原创 【AFNetWorking源码(二)AFURLSessionManger和AFHTTPSessionManager】

在该模块中主要的任务就是发起网络请求。分成AFURLSessionManger和 AFHTTPSessionManager两部分来做处理。AFURLSessionManger是AFHTTPSessionManager的父类,其中AFURLSessionManger内部还包含AFURLSessionManagerTaskDelegate和_AFURLSessionTaskSwizzling;

2023-05-17 22:44:58 876

原创 【#ifndef, #define, 和 #endif】

ifndef它是i的简写,是宏定义的一种,确切的说是预处理功能(宏定义、文件包含、条件编译)三种中的一种——条件编译。使用#ifndef可以避免以下错误:如果在.h文件中定义了全局变量,一个C文件包含了.h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef则不会出现这种错误。#ifndef:如果未定义)用于判断指定的标识符是否已经被定义。如果该标识符未定义,则执行下面的代码块,否则跳过。#define: 用于定义指定的标识符,通常用于定义宏。

2023-05-15 11:40:40 6835 1

原创 【OC底层-类和对象深基】

分析了对象,类及其父类元类的关系之后,类和对象的底层实现是需要我们更多的学习的,在之后的消息转发,包括源码的部分结构体,包括RunLoop等等或多或少都会涉及OC类和对象的底层。我个人认为深究类和对象的深入底层的代码较为繁琐看不懂也记不住,对于类和对象 isa_t指针是重中之重,跟着这个指针向下一步一步探索,能看懂多少就看造化了。编写代码运行后,开始类的方法,成员变量 属性 协议等信息都存放在constclass_ro_t中运行过程中,会将信息整合,动态创建class_rw_t然后会将。

2023-05-10 22:45:54 662

原创 【iOS开发】理解OC的类,父类,元类的关系

在OC中,有对象objc,有类Class,有父类SuperClass,其实还有一种元类MetaClass。在接下来的RunLoop,消息转发机制的学习之前需要知道OC类和对象的底层,所以理解类, 父类,元类的关系是基础。

2023-05-09 18:54:39 1001

原创 【iOS KVO(下) KVO的内部结构和源码】

KVO 和 KVC 都是 Cocoa 框架中的重要机制,它们可以帮助开发者更加方便地操作对象的属性和状态。

2023-05-06 00:13:17 1024 1

原创 【iOS KVO(上)实现过程】

利用runtime的API动态生成一个子类,并让实例对象的isa指向这个全新的子类当修改实例变量对象的属性时候,在全新子类的set方法中会调用Foundation的_NSSetXXXValueAndNotify函数调用原来的setter:内部会触发监听器的监听方法在调用的时候,会自动生成并注册一个该对象(被观察的对象)对应类的子类,取名NSKVONotify_Class,并且将该对象的isa指针指向这个新的类。

2023-05-04 22:57:54 980 4

原创 【iOS-分类,拓展和关联对象底层探究】

分类是一种在现有类中添加方法的方式。使用分类,可以将一个类的功能分为多个逻辑部分,使得代码更加清晰、易于维护。可以为任意一个类添加方法,包括系统自带的类。创建PersonC和它的分类,在分类实现方法,在本类的对象调用分类也遵循公开和私有方法,分类.h@end分类mNSLog(@"这是PersonC的Category添加的方法");在ViewComtroller调用可以为类添加实例方法和类方法。分类中的方法可以访问原类的所有成员变量和方法。

2023-04-26 09:44:41 774

原创 【iOS-#import <> ““, @class和C- #include<> ““, 】

问题解决完成1。

2023-04-20 23:02:57 531

原创 【iOS】NSError**和__autoreleasing场景

NSError** 是指向一个 NSError对象指针的指针,通常用于在方法中传递错误信息。使用这种方式传递错误信息的原因是如果在方法执行过程中发生错误,方法本身可能无法处理该错误,因此需要将错误信息返回给调用方以供处理什么是指向对象指针的指针?指向对象指针的指针是指一个指针变量,它存储的是另一个指针变量的地址,而这个指针变量指向的是一个对象为什么NSError需要__autoreleasing的帮助?在方法中将 NSError 对象传递给调用方时,通常需要使用修饰符,以确保错误对象能够被正确地释放。

2023-04-17 22:09:46 529

原创 【iOS的NSNULL nil Nil 】

偶然看到了NSNULL 简单了解他的兄弟nil Nil记录一下。

2023-04-16 22:29:30 333

原创 【iOS开发-响应者链Responder Chain】

源码的学习是枯燥的,困难的。。。。所以打算看一些别的东西缓缓。。因为手机的版本问题,我一直没办法进行真机测试。一些点击事件什么的都很模糊,都是用时电脑的光标点击完成的,在这个点击app实现功能的过程里面就涉及到了一些响应过程。在iOS里,被称为响应者链(Responder Chain。记住 先触发响应者事件,接着触发触摸事件,也就是先寻找响应者!!!!!刚开始一直没搞懂,现在明白了。触摸事件传递过程是从父控件到子控件。

2023-04-11 00:19:03 1272 1

原创 【iOS-JSONModel源码】

JSONModel是除了Masonry之后的很重要的库,在知乎日报和自己写的项目的网络请求数据层面都用到了它。一个库开始的学习都是从使用开始,随着学习的知识的增多,现在简单的使用已经不满足了,这篇博客通过参考别人的源码解析,学习JSONModel是如何实现的,以及里面的方法是什么,学习JSONModel的源码这里的学习还学习了一些之前不知道的用法,例如转换属性名称和自定义错误类型,都是很实用的方法。

2023-04-06 11:00:00 480

原创 【iOS-MRC】

ARC和MRC是密不可分,ARC是编译器帮助我们自动进行内存管理的模式,在很早之前需要我们手动管理内存和引用计数,这就是MRC模式。的MRC是一种手动内存管理模式,它是在ARC之前的一种内存管理模式。在MRC模式下,开发者需要手动管理对象的内存分配和释放,通过增加和减少对象的引用计数来进行内存管理。程序在运行的过程中,往往涉及到创建对象、定义变量、调用函数或方法,而这些行为都会增加程序的内存占用。而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的。

2023-03-28 22:59:23 280 1

原创 【iOS开发-多线程【二】 GCD<二>】

GCD的实现和API一样重要,主要解释了如何将串行并行和同步异步任务结合达到提升进程的效果。

2023-03-23 22:24:11 381

原创 【iOS开发-ARC实现-源码略读】

这里是与上一篇的ARC结合,ARC的规则讲述了在使用ARC过程需要注意的地方,使用ARC的某些原理,ARC的实现则是通过Clang和objc4库的源代码对ARC的实现过程的代码进行一个详细的学习和了解。LLVM的编译过程还是需要结合一些网上的总结博客来看,至少我是自己借助了这些有用的资源才明白了一些。苹果官方称ARC是由编译期进行内存管理的,但实际上只有编译器是无法完全胜任的,在此基础还需要OC运行时库的帮助Clang (LLVM编译器) 3.0以上。

2023-03-20 12:10:40 523

原创 【iOS 开发-ARC规则】

对于现在的Xcode,开发者不需要手动的管理内存和对象的引用计数,自从引入了ARC模式之后,我们不需要过多的关注内存方面,但是对于iOS的对象的引用计数和内存管理的了解是必要的,本篇博客记录ARC的深入学习了解。在这之前需要复习先前的一些知识iOS属性关键字iOS内存管理之引用计数ARC的规则是针对MRC和ARC下不同的总结,更多的是表面的方法需要注意的东西,ARC的实现则是探讨到了底层的代码,需要更加详细的学习,二者结合更能理解ARC,先学会表面方法的的规则,在去深入学习。

2023-03-16 23:16:51 446 1

原创 [iOS - Block基础再探究]

小蓝书的Block说的东西实在是太少了,本篇博客复习和学习混搭,重点了解Block的基础和一些关键问题,针对于小白书的BLK部分进行基础学习block是一个带有自动变量值的匿名函数,它也是一个数据类型,跟int double float一样都是数据类型.所以我们是可以创建一个block类型的变量.关键理解代码块,block类似一个于方法。而每一个方法都是在被调用的时候从硬盘到内存,然后去执行,执行完就消失,所以,方法的内存不需要我们管理,也就是说,方法是在内存的栈区。所以,

2023-03-07 23:08:20 267

原创 【iOS-系统框架】

小蓝书的最后一张学习的主要内容是OC的系统框架,对于OC而言Foundation框架是OC最基本最重要的框架了“无缝桥接”技术其实就是不同库之间相同类型的相互转换。使用“无缝桥接”技术,可以在定义于Foundation框架中的OC类和定义于CoreFoundation框架中的C数据结构之间互相转换转换操作中的__bridge告诉ARC如何处理转换所涉及的OC对象。__bridge本身的意思是:ARC仍然具备这个OC对象的所有权。而则与之相反,意味着ARC将交出对象的所有权。

2023-02-10 15:53:58 1893

原创 【iOS-多线程【一】GCD【一】

上周学习的BLOCK是看了小蓝书,上面讲的确实不明白,经过指点,对于小蓝书的第六章-块与大中枢派发还需要详细学习另一本书,这次先补充GCD,block打算到学校进行一个详细的学习本篇文章宗旨是记录学习,如遇错误敬请评论区斧正。GCD的全称是Grand Central Dispatch,是异步执行任务的技术之一。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。

2023-02-07 23:47:43 722 2

原创 【Effective_Objective-C_6 块block】

本章的内容是比较麻烦复杂的一章,牵扯到了GCD和Block,在之前也有学习过,本章作以深入的了解多线程问题是开发应用程序的时候最让人头疼的问题,尤其是线程阻塞,在更新了Mac之后我经常的遇到了彩虹小球的问题,当然在开发的时候还没有出现过线程阻塞问题。Apple以块和大中枢派发设计了全新的多线程,也就是block和GCD。这是两种不同的技术,但都是一并引入的。块:这个机制方便我们把代码像对象一样传递,令其在不同的环境下运行,而且在定义块的范围内可以访问其中的全部变量。

2023-01-31 17:30:53 1561 3

空空如也

空空如也

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

TA关注的人

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