自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 假期学习--iOS中的static关键字

静态存储和动态存储存储方式会决定变量的生命周期静态存储的变量是加上Static关键字的全局变量和局部变量,它们存储在全局静态区域全局变量、静态全局变量、静态局部变量采用静态存储方式,局部变量采用动态存储方式。对于全局变量来说,static 改变了其作用域;对于局部变量来说,static改变了其存储方式,从而改变了生命周期。

2024-09-27 16:15:43 385

原创 假期学习--iOS内存五大分区

堆和栈的区别栈区运行时系统分配内存,堆区手动分配内存,静态区-常量区-代码区编译时分配内存。

2024-09-26 15:26:00 476

原创 假期学习笔记总结--iOS 自动释放池

下面我们来看一下。

2024-09-19 20:16:47 1359

原创 假期学习--iOS 编译链接

四步:1.预处理2.编译3.汇编4.链接。

2024-09-19 19:49:39 1089

原创 假期学习--load和initialize

loadheinitlize方法都会在实例化对象之前调用load执行在main函数之前,initlize执行在main函数之后这两个方法会被自动调用,最好不要手动调用;load和initlize有关父类的调用都是隐式;子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类initialize方法对一个类而言只会调用一次(Person、或者是Person+Category)都是一个Perosn类。

2024-09-09 20:25:21 991

原创 假期学习-- iOS 通知详解

从我们之前使用通知的流程和代码来看,通知其实就是一个单例,方便随时访问。

2024-09-09 11:26:34 1295

原创 假期学习--iOS APP启动流程

首先区分冷启动和热启动的区别 :冷启动:app启动的时候,app的进程不在系统里面,需要开启新线程热启动:app启动的时候,app的进程在系统里面,不需要开启新线程;

2024-09-08 20:21:30 383

原创 iOS持久化

/文件路径搜索参数一:指定搜索的目录名称,比如这里用NSDocumentDirectory表明我们要搜索的是Documents目录。如果我们将其换成NSCachesDirectory就表示我们搜索的是Library/Caches目录。参数二 NSSearchPathDomainMask domainMask:搜索主目录的位置,NSUserDomainMask表示搜索的范围限制于当前应用的沙盒目录。

2024-09-05 09:35:38 459

原创 iOS kvo kvc

Objective-C还支持一种更灵活的操作方式,这种方式允许以字符串形式间接操作对象的属性,这种方式的全称是(简称),即键值编码。无论是setValue:属性值forKey:还是valueForKey:属性名:,它们的实现逻辑都是差不多的:1.首先会从调用方法的类中寻找setter或getter方法,找到就调用,否则下一步2.然后从调用对象中找_name成员变量,找到赋值,否则下一步3.从调用对象中找name成员变量,找到赋值,否则下一步4.调用方法或。

2024-09-05 08:48:11 1147

原创 假期学习----iOS多线程

是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。GCD 可用于多核的并行运算;GCD 会自动利用更多的 CPU 内核(比如双核、四核);GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程);程序员只需要告诉 GCD 想要执行什么任务,不需要编写任何线程管理代码。

2024-09-04 12:37:20 1615

原创 假期学习-- iOS runtime的简单了解

(Runtime字典转模型,数据的接受取决于模型的属性)首先需要了解,属性定义在类里面,那么类里面就有一个属性列表,属性列表以数组的形式存在,根据属性列表就可以获得类里面的所有属性名,所以遍历属性列表,也就可以遍历模型中的所有属性名。所以RunTime字典转模型过程就很清晰了。

2024-09-04 11:07:09 1271

原创 假期学习-- iOS runloop了解和使用

CFRunLoopModeRef代表RunLoop的运行模式 一个 RunLoop 包含若干个 Mode,每个Mode又包含若干个Source、Timer、Observer 每次RunLoop启动时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode 如果需要切换Mode,只能退出RunLoop,再重新指定一个Mode进入,这样做主要是为了分隔开不同组的Source、Timer、Observer,让其互不影响。,但如果对应线程上有runloop运行就会一直运行,时刻等待用户的输入操作;

2024-09-04 08:49:04 1698 1

原创 假期学习--对象底层结构和继承链

是Objective-C中所有对象的基础结构,它允许运行时系统识别和操作对象。objc_class描述了一个类的结构和行为,它本身也是的一种特殊形式,意味着类也可以被当作对象来对待。每个实例都有一个isa指针,指向其所属的objc_class。每个objc_class实例也有一个isa指针,但它指向的是该类的元类,元类中包含了类方法。通过这种方式,Objective-C实现了动态类型和动态绑定,允许在运行时根据对象的实际类型调用适当的方法。

2024-08-29 19:54:14 819

原创 iOS--oc对象,类,和元类本质

最近在学习runtime的过程中,发现其中消息发送-动态方法解析-消息转发中涉及到了大量的类与对象的底层知识,看别人博客的时候,别人往往也会先讲一遍oc对象的本质;具体参考了iOS底层原理总结 - 探寻OC对象的本质@publicint _no;int _age;int _no;int _age;此结构体占用多少存储空间,对象就占用多少存储空间。

2024-06-12 19:36:53 1368

原创 iOS--block再学习

Block时c语言的扩充功能,它允许开发者定义一段可重用的代码,并在需要时像变量一样使用这段代码。Block本质上是一个OC对象,具有自己的isa指针。它可以看作是带有自动捕获变量能力的匿名函数。Block可以捕获和存储它所在的环境中的变量和常量。首先我们先从它可以看作是带有自动捕获变量能力的匿名函来了解和分析block;

2024-06-09 12:57:22 996

原创 iOS--工厂设计模式

通过类族模式,UIButton能够隐藏其背后的实现细节,提供统一的公共接口供开发者使用。这简化了开发过程,提高了代码的可读性和可维护性。同时,由于系统框架内部可以根据需要动态选择并创建不同的子类实例,因此也提高了代码的灵活性和可扩展性。

2024-05-28 20:21:23 1708 1

原创 iOS--锁的学习

主要参考了iOS多线程安全-13种线程锁🔒在iOS开发中,锁是一种用于管理并发访问共享资源的机制。多个线程可以同时访问共享资源,但在某一时刻只允许一个线程对资源进行读取或修改,以避免数据竞争和不一致性。锁的主要目的是确保在给定时间内只有一个线程可以进入被锁定的代码块或临界区。当一个线程获得了锁并进入临界区时,其他尝试获取锁的线程会被阻塞,直到该线程释放锁。这样可以保证在临界区内的代码只会被一个线程执行,从而避免竞态条件和数据不一致性的问题。

2024-05-23 10:58:36 1083

原创 死锁及线程与队列之间的等待关系

上面这几个例子可以很好的帮助理解线程队列以及任务同步和异步之间的关系,不必去死记这几这者间排列组合的结果;

2024-05-22 18:45:31 1303

原创 iOS--kvc学习

iOS 中的键值编码(Key-Value Coding,KVC)是一种机制,它允许开发者通过字符串键来访问对象的属性和值,而不是直接使用访问器方法或实例变量。KVC 提供了一种简单而灵活的方式来操作对象的属性,减少了样板代码和提供了动态性。但就目前我学到的看来,kvc机制的调用更像是系统自动寻找对应的方法来实现对对象属性和值的访问;访问属性:使用 valueForKey: 方法可以获取对象的属性值,而使用 setValue:forKey:方法可以设置对象的属性值。

2024-05-16 15:40:18 774

原创 iOS--底层学习--GCD的简单认识

前段时间看了一阵子源码,但遇到了大量的线程操作,导致看起来迷迷糊糊的,而且看源码的方式也有点不对,所以现在打算先学习部分iOS的底层知识后,再回去重新过一遍源码;这里先来了解一下之前蓝书和小白书上的GCD;这里参考了这位大神的博客iOS多线程:『GCD』详尽总结iOS中的GCD是什么,简单介绍一下:GCD,全称为Grand Central Dispatch,是苹果公司推出的一种用于多核编程的技术,首次出现在Mac OS X 10.6 Snow Leopard和iOS 4中。

2024-05-14 20:21:13 712

原创 iOS--runloop的初步认识

这里可以举一个简单的例子,如果是在默认的设置下,当我们滑动某个控件时,我们在同一个线程上的定时器在滑动时停止,在定时轮播图的实现中应该都遇到过;,Runloop,即运行循环,是苹果操作系统(如iOS、macOS)中一个重要的基础架构组件,它是线程相关的,负责管理和调度线程上的各种事件和任务,确保线程在有工作时忙碌,无工作时休眠,以此达到高效利用系统资源的目的。如果指定了一个不存在的mode来运行RunLoop,那么会失败,mode不会被创建,所以这里传入的mode必须是存在的。

2024-05-07 19:00:39 545

原创 SDWebImage 源码

createDownloaderOperationWithUrl方法中,创建了一个request,最后返回了一个operation,operation其实是一个SDWebImageDownloaderOperation的实例,这个在初始化sessionConfiguration的时候就设置了。在解释这个方法之前,要先了解NSCache类(他的基本操作类似于NSMutableDictionary,但是他的操作是线程安全的,不需要使用者去考虑加锁和释放锁),NSCache是系统提供的一个做缓存的类;

2024-05-02 10:52:55 1079

原创 SDWebImage源码分析

SDWebImageManager同时管理着SDIMageCache和SDWebImageDownloader两个类,SDWebImageManager首先会通过SDImagerCache类来查询缓存,如果缓存中没有找到对应的图片就会通过SDWebImageloader来下载图片,下载下来的图片会存入缓存,然后显示。这个类的方法很多,这里具体讲一个和功能实现相关的方法,也是从url网络下载图片的方法,同上面的- (void)sd_setImageWithURL:(nullable NSURL *)url。

2024-05-02 10:52:09 729

原创 iOS--第二章block

这里的Block中的_main_block_impl_0结构体实例持有指向——block变量的__Block_byref_val_0结构体实例指针;这时,————block变量同Block一样变成__block_byref_val_0的结构体类型变量,也就是放在栈上的结构体实例,这个结构体初始化持有原自动变量的成员变量;Block转换为Block的结构体类型的自动变量, __block变量转换为block变量的结构体类型的自动变量,这些都是在栈上生成的该结构体的实例变量;

2024-03-17 20:37:58 1214

原创 Effective objective-C---第六章学习--块

补进度ing。

2024-03-05 20:37:38 3069

原创 Effective objective-c-- 内存管理

寒假比较忙没能能认真看,就拖到学校了来看了,进度落后很多了,只能尽量赶了;

2024-03-03 18:24:35 3878

原创 Effective oc 2.0 第四章学习

问题在于,分类中的方法是直接添加在类里面的,他们就好比这个类中的固有方法。如果类中本来就有此方法,而分类又实现了一次,那么分类中的方法会覆盖原来那一份实现代码。根据调试器回溯信息中的分类名称,很容易就能定位到类中方法所属的功能区,这对于应该视为私有的方法来说更是极为有用。该模式的主旨是:定义一套接口,某对象若想接受另一个对象的委托,则需遵从此接口,以便成为其“委托对象”(delegate)。重要之处在于,这是唯一能够声明实例变量的分类,而且此分类没有特定的实现文件,其中的方法都应该定义在实现文件里。

2024-02-25 14:32:40 988

原创 Effective oc 2.0 第三章学习--接口与API设计

具体加什么来代表私有方法因人而异,自己怎么舒服怎么来,唯一注意的是:一定不要只使用_作为前缀,用p_都比那个好,因为苹果公司使用的就是_作为私有方法的前缀的,你自己定义的私有方法名有可能就会和人家自带的冲突。“自动引用计数”在默认情况下不是“异常安全的”,就是说,如果抛出异常,那么本应该在作用域末尾释放的对象现在却不会释放了,这样就会造成内存泄漏问题,如果想生成“异常安全”的代码,可以通过设置编译器的标志来实现,不过这将引入一些额外的代码,在不抛出异常时,也照样要执行这部分代码。若执行操作时还需数,

2024-01-28 15:45:13 1101

原创 Effective oc 2.0 第二章学习--对象、消息、运行期

在用oc等面向对象的语言编程时,对象就是“基本构造单元”,开发者可以通过对象来存储和传递数据。在对象间传递数据并执行任务的过程就叫做“消息传递”。当应用程序运行起来以后,为其提供相关支持的代码叫做“objective-c运行环境”。

2024-01-21 15:03:37 899

原创 小蓝书第一章总结

小蓝书第一章总结熟悉Objective-c了解objective-c的起源在类的头文件中尽量少引入其他头文件多用字面量语法,少用与之等价的方法字面数值字面量数组字面量字典可变数组与字典局限性多用类型常量,少用#define预处理命令用枚举表示状态,选项,状态码熟悉Objective-c了解objective-c的起源oc语言是c语言的超集,在语法上和c++十分相似,都是面向对象的语言;oc使用的是动态绑定的消息结构而非c语言的函数调用;oc语言只有在运行时才会检查对象类型,编译时没用这个过程,这个

2024-01-14 19:18:05 1014

原创 iOS--UIPickerView学习

一种很常见的用法是把各个数据以滚动的形式组成一个组合数据,比如年-月-日的日历或者时钟,以及省级-市级-区的地域;其他没啥好说的了,因为用起来真的太像UItableview了,这里简单解释一下滑动函数的逻辑,如果滑动“省”,则更新市和区的component并其row归零;这个控件是iOS中自带的控件,使用方法类似于UItableview,所以就从UItableveiw的使用来分析了,这里跟着别人做了一个省级-市级-区的地域的小demo。你可以在该方法中获取选择的行和列索引,并根据需要进行相应的处理。

2023-11-29 21:06:11 2527 2

原创 iOS--UIimagePickerController

UIImagePickerController 是 iOS 开发中的一个内置视图控制器,用于方便地实现图像和视频的选择和拍摄功能。它提供了一个用户界面,允许用户从设备的相册库中选择照片或视频,或者使用设备的摄像头进行拍摄。写完知乎日报之后,不知道该学些什么东西,但总的和以后写的项目有关,所以看学长的博客先学习一项相机和相册的调用。从相册中选择照片:用户可以浏览设备相册中的照片,并选择其中的一张照片作为所选项。从相册中选择视频:用户可以浏览设备相册中的视频,并选择其中的一个视频作为所选项。

2023-11-26 20:54:07 1898

原创 iOS知乎日报仿写--第五周

因为上周的金工实习,所以知乎日报的仿写往后面拖了一周,但深的东西也比较少了;所以这次的内容不会很多;还有很大的改进空间,接下来一周会一点点的优化这个项目的,这里就基本完成了。这应该时目前来说写过的一个最大的项目了,涉及到的知识也很全面,不仅仅是最前面知识的熟练应用,也是一次很好的锻炼;

2023-11-19 20:43:07 133

原创 知乎日报仿写--第四周

这两周完成的东西比较少,有金工实习的原因也有自身的一些原因,但尽量下周完成知乎日报的仿写;这两周完成了评论区数据的请求,cell高度的计算,cell高度自适应,以及对以前bug的修复;

2023-11-13 16:14:40 148

原创 iOS--知乎日报第二周总结

本周是知乎日报的第二周,这几天写的东西挺少的;目前大概实现了新闻的点击进入,以及轮播图的点击进入 ,还有新闻进入时的异步加载 (但更新时未能实现);

2023-10-29 19:00:57 228

原创 iOS--知乎日报第一周总结

本周开始了知乎日报的仿写(其实算到今天已经是11天了,但刚开始的时候因为太久没写这种比较大的项目了就一直拖着,写的很慢);这里用到了许多暑假学习和使用的一些知识,所以复习了以前学的一些东西本周比较简单的完成了主界面的布局,主要的知识点包括定时轮播图,下拉刷新,和更新数据以及manager单例封装URL和AFNetworking的网络请求;主线程的回调;以及SDWebimage下载图片比较简单的实现了我上面说的那些功能,单也有些不太好的地方,比如一次只能请求一组cell;

2023-10-23 15:14:47 194

原创 iOS--jsonModel的使用和Manager封装网络请求

在.m文件中要注意重写一个方法,+ (BOOL)propertyIsOptional:(NSString *)propertyName,如果不重写这个方法,可能会导致程序奔溃,但不绝对;

2023-10-17 19:59:15 146

原创 iOS--仿写计算器

这里我设置了两个数组,一个用来存储按钮输入的字符串,一个用来存储按钮本身的值,(我看学长有的用tag值来实现传值,但我感觉那样不太符合MVc模式的理念,我认为可以应该将view中的对象能够在controller全部访问,model则用于数据存储);且在MVC模式下,应该保证在controller里面任然可以访问到view中的视图对象,所以这里的多个按钮我们选择循环创建,但要存入一个数组中去(不然设多个属性代码量太大);这两步可以看看我之前的博客,这里就补充一下负数的计算;注意好MvC的各自的功能,

2023-10-08 20:16:04 89

原创 iOS--键值编码KVC

如果我们对一个基础类型赋值nil,正常情况下,这是不被允许的,同理,kvc也是如此,更为具体的说,当我们用kvc为一个基础类型赋值nil是,对象会调用setNilValueForKey方法,这个方法默认情况下会引发NNSInvalidArgumentExeception异常,遭成程序奔溃跟上面一样,我们也可以对它重写;在需要频繁访问属性的场景下,直接方法调用可能更高效。kvc除了可以操作对象的属性,还可以操作对象的复合属性,所谓的复合属性,kvc也将其称为key路径,简单的来说,就是操作属性的属性;

2023-09-24 21:18:53 95

原创 计算器的仿写--四则运算

下周要仿写计算器了,不过在那之前我们要先了解以下如何用计算机来进行简单的四则运算;不过个人能力有限,负号的运算没能实现,这里就讲一下我想到的;首先我们用字符串来实现四则运算,我们需要先将中缀表达式转为更适合电脑理解的后缀表达式;

2023-09-24 17:58:15 134

空空如也

空空如也

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

TA关注的人

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