![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS笔记
文章平均质量分 86
西邮郭富城
不要摆烂!不要摆烂!!不要摆烂!!!
展开
-
【iOS】—— 循环引用问题
对象A和对象B,相互引用了对方作为自己的成员变量,只有当自己销毁时,才会将成员变量的引用计数减1,这就导致了A的销毁依赖于B的销毁,同样B的销毁依赖于A的销毁,这样就造成了循环引用问题。对象A内部强持有obj,对象B内部强持有obj,若此时对象A的obj指向对象B,同时对象B中的obj指向对象A,就是相互引用。对象N,每个对象中都强持有一个obj,若每个对象的obj都指向下个对象,就产生了多循环引用。假如有一个对象,内部强持有它的成员变量obj,若此时我们给obj赋值为原对象时,就是自循环引用。...原创 2022-08-18 10:19:13 · 1313 阅读 · 0 评论 -
【iOS】—— 响应者链和事件传递链
通过响应事件传递过来的新响应者,将这个事件的具体调用方法(即我们自定义的方法)传递给了这个新响应者,这样新响应者就实现了方法的调用,执行了我们自定义的方法。方法来作具体处理,然而这些方法默认都是不做处理的,但是我们要是想让该响应者响应该事件就可以重写一开始说的那几个响应事件方法,并且我们也可以在重写。这里我们扩大其响应范围,创建的button大小是不会变化的,变化的只是我们看不到的其可以响应的范围。通过这三种处理事件的方法就可以知道事件的整个过程,我们平时经常使用的就是触摸事件,其中有两个参数,......原创 2022-08-14 10:38:07 · 1250 阅读 · 1 评论 -
【iOS】——分类、扩展和关联对象
method_list_t 类型的【对象方法列表结构体】_method_list_t 类型的【类方法列表结构体】_protocol_list_t 类型的【协议列表结构体】_prop_list_t 类型的【属性列表结构体】注意结构体中并不包含类型,也就是不包含【成员变量结构体】。首先通过分类的结构体存储各个分类中的方法、协议、属性然后在运行期时候调用相关方法,再将分类结构体中的内容都存入相关的全局中,以cls为key,以列表为value最后再通过cls找到全局。......原创 2022-08-14 10:37:23 · 1304 阅读 · 0 评论 -
【iOS】—— autoreleasepool详解
总的来说,就是一个双向链表,链表中的每个节点是一个栈,栈中保存了指向的指针并且其中加入了需要自动释放池管理的对象,所以在中的所有对象引用计数都会+1,一旦出了,没有指针指向对象,对象的引用计数就会-1,ARC下,xcode会为代码自动添加。自动释放池是由以双向链表的方式实现的当对象调用方法时,会将对象加入的栈中调用方法会向栈中的对象发送release消息。......原创 2022-08-14 10:36:41 · 1482 阅读 · 0 评论 -
【iOS】—— RunLoop详解
一般来说,一个线程一次只能执行一个任务,执行完成后线程就会退出。就比如之前学OC时使用的命令行程序,执行完程序就结束了。而runloop目的就是使线程在执行完一次代码之后不会结束程序,而是使该线程处于一种休眠的状态,等待有事件需要处理的时候,再醒来处理。简单的来说,runloop可以让线程在需要做事的时候忙起来,不需要的时候让线程休眠,使程序不会结束。RunLoop需要处理的消息,包括time以及source消息,他们都属于Mode item。......原创 2022-08-09 18:46:48 · 2689 阅读 · 0 评论 -
【iOS】—— pthread、NSThread
使用C语言编写,需要程序员自己管理线程的生命周期,使用难度比极大,我们在iOS开发中几乎不适用pthread,但是我们可以来了解一下。NSThread 是苹果官方提供的,使用起来比 pthread 更加面向对象,简单易用,可以直接操作线程对象。不过也需要需要程序员自己管理线程的生命周期(主要是创建),我们在开发的过程中偶尔使用 NSThread。线程安全解决的方案:给线程加锁,在一个线程执行该操作的时候,不允许其他线程进行操作。就是这个用起来感觉太繁琐了,很古老,用了其他的再用这个感觉就是降维打击。...原创 2022-08-05 17:43:09 · 423 阅读 · 1 评论 -
【iOS】—— NSOperation、NSOperationQueue
我们可以通过自定义继承自NSOperation的子类,重写main或者start来定义自己的NSOperation对象。如果只是重写了main方法,有底层控制变更任务执行、完成状态以及任务退出。如果重写了start方法,需要自己控制任务状态。重写main方法比较简单,我们不需要管理线程的状态属性executing(是否正在执行)和finished(是否完成)。当main执行完返回的时候,这个操作就结束了。......原创 2022-08-05 17:42:40 · 779 阅读 · 0 评论 -
【iOS】—— 深入了解GCD
百度:Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务。在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。苹果官方:Grand Central Dispatch(GCD) 是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级实现。...原创 2022-08-05 17:42:04 · 501 阅读 · 0 评论 -
【iOS】—— 持久化
iOS中的沙盒机制是一种安全体系。为了保证系统安全,iOS每个应用程序在安装时,会创建属于自己的沙盒文件(存储空间)。应用程序只能访问自身的沙盒文件,不能访问其他应用程序的沙盒文件,当应用程序需要向外部请求或接收数据时,都需要经过权限认证,否则,无法获取到数据。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。......原创 2022-08-04 10:53:11 · 780 阅读 · 0 评论 -
【iOS】—— 通知、单例、代理以及设计模式总结
首先创建一个自定义文件,继承自NSObject,用作自定义通知的类,因为通知是可以实现多对多关系的,所以我们在这个类中还需要定义一个可变的字典属性,用来存储注册的通知。又因为注册的通知数据需要一直保存下来,所以我们使用单例来完成这一操作,保证我们在想要访问已经注册的通知的时候,其数据是存在的。............原创 2022-08-04 10:50:51 · 718 阅读 · 0 评论 -
【iOS】—— KVC与KVO
KVC的全称是,俗称“键值编码”,可以通过一个key来访问某个属性;KVC提供了一种间接访问其属性方法或成员变量的机制,可以通过字符串来访问对应的属性方法或成员变量;它是一个非正式的Protocol,提供一种机制来间接访问对象的属性,而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。KVO的全称是,俗称“键值监听",可以用于监听某个对象属性值的改变;KVO是苹果提供的在套事件通知机制。KVO和都是iOS中观察者模式的一种实现,区别。...原创 2022-08-03 13:03:38 · 1130 阅读 · 0 评论 -
【iOS】—— 六大原则和工厂模式
对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守,而是说遵守程度的多少。任何事都是过犹不及,设计模式的六个设计原则也是一样,制定这六个原则的目的并不是要我们刻板的遵守他们,而需要根据实际情况灵活运用。对他们的遵守程度只要在一个合理的范围内,就算是良好的设计。我们用一幅图来说明一下。图中的每一条维度各代表一项原则,我们依据对这项原则的遵守程度在维度上画一个点,则如果对这项原则遵守的合理的话,这个点应该落在红色的同心圆内部;如果遵守的差,点将会在小圆内部;.......原创 2022-08-03 13:01:30 · 886 阅读 · 0 评论 -
【iOS】—— weak的基本原理
1、weak的原理在于底层维护了一张结构的hash表,key是所指对象的地址,value是weak指针的地址数组。2、weak关键字的作用是弱引用,所引用对象的计数器不会加1,并在引用对象被释放的时候自动被设置为nil。3、对象释放时,调用函数根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。4、文章中介绍了SideTable、、这样三个结构,它们之间的关系如下图所示。httpshttps。......原创 2022-07-28 19:32:54 · 1240 阅读 · 0 评论 -
【iOS】—— 消息传递与转发
impimp。原创 2022-07-23 10:07:14 · 708 阅读 · 0 评论 -
【iOS】—— 对象的底层结构和继承者链(isa、class)
这里面其实利用位域存储数据,简单来说因为这个bits跟指针大小相同,在iOS中指针大小是8个字节,也就是64位,但是通常单一数据无法用满这64位的,会有很多空位,造成空间浪费。想要一个可以保存体系结构指针类型的整数类型的常见原因是对指针执行特定于整数的操作,或者通过将指针提供为整数“句柄”来模糊指针的类型。的类型,由代码中标注的出来的内存大小,可以算出最后计算出的cache类的内存大小为12+2+2=16字节。指针,那么也就是说明,每一个新定义的类,它对应的结构体中都会有一个这个。......原创 2022-07-20 20:26:53 · 579 阅读 · 0 评论 -
【iOS】—— 分类、扩展和关联对象
一、分类与扩展的区别1、category类别(分类)专门用来给类添加新的方法。不能给类添加成员属性,添加了成员属性,也无法取到。【注意】:其实可以通过runtime给分类添加属性,即属性关联,重写setter、getter方法。分类中用@property定义的变量,只会生成变量的setter、getter方法的声明,不能生成方法实现和带下划线的成员变量。2、extension(类扩展)可以说成是特殊的分类,也可称作匿名分类。可以给类添加成员属性,但是是私有变量。可以给类添加方法,也是原创 2022-05-31 17:51:16 · 630 阅读 · 0 评论 -
【iOS】—— 富文本实现超链接功能
我们经常会看到很多程序上会有超链接,并且我们点击之后会直接跳转到响应的网页界面,但是我们无法使用普通的UILabel来实现,而是使用UITextView来完成这个操作的,今天就来浅谈一下它的实现。一、UITextView详解:1.UITextView简单属性: //初始化UITextView UITextView *textview = [[UITextView alloc] initWithFrame:CGRectMake(40, 100, 300, 50)]; textview.原创 2022-05-24 17:17:38 · 3365 阅读 · 3 评论 -
【iOS】—— AFNetworking源码(3.2.1版本)(未完)
一、基础使用1.初始化:AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];在AFHTTPSessionManager类中所有的初始化方法最终都会调用到- (instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration方法:- (instancetype)initWithBas原创 2022-05-22 12:02:40 · 373 阅读 · 0 评论 -
【iOS】—— SDWebImage源码(5.9.5版本)
图片加载的主要流程原创 2022-05-14 20:22:02 · 761 阅读 · 2 评论 -
【iOS】—— typeof和typedef的爱恨情仇
我们平时经常使用typedef,但是前几天偶然我看到了typeof,第一眼还以为是我眼花了看错了,后来经过仔细的思考和查阅我才知道了这个关键字,下面简单介绍一下。一、typedeftypedef常用于命名(枚举和block),它的作用就是给一个变量起一个别名,而不只是简单的宏替换,就像这样:typedef NS_ENUM(NSInteger, UITableViewStyle) { UITableViewStylePlain, // regular table view原创 2022-05-08 16:19:21 · 1138 阅读 · 2 评论 -
【iOS】—— 内存的五大分区
平时我们编写程序的时候可能不太在意系统的内存问题,那么我们所编写代码变量都是怎么在内存中存取的呢?内存其实分为五大分区,栈区(系统管理的地方)、堆区(程序员控制的地方)、常量区(全局区)、静态区和代码区,下面我们来简单介绍介绍。首先我们要知道,这里说的内存指的就是RAM。一、五大分区1.栈区创建临时变量时由编译器自动分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序原创 2022-05-01 13:07:56 · 1491 阅读 · 0 评论 -
【iOS】—— 浅谈UISearchController
UISearchController是iOS的一个系统的搜索控件,在平时我们输入信息的时候会出现相应的联想搜索的内容,然后通过UITableView展示到搜索框的下面,供我们选择。原本还想用UITextField来实现这个功能,人家现在有,那就浅学习一手。一、需要遵守的协议:因为它用到的UITableView所以一定是要用到UITableViewDelegate, UITableViewDataSource的,另外我们要实现其联想搜索功能还的遵守这两个协议UISearchControllerDelega原创 2022-04-13 19:53:58 · 1798 阅读 · 0 评论 -
【iOS】—— 获取本机当前经纬度坐标位置和通过经纬度坐标测算距离
平时我们再写程序的时候经常会需要访问当前设备的位置信息和计算当前位置距某点的距离,下面我来为大家浅谈一下使用OC自带的库来获取当前坐标和其的距离计算。一、获取当前经纬度坐标步骤1:添加关键字首先要Info里添加两个键值对,向用户请求位置服务时会显示在这里设置的值的内容。<key>NSLocationWhenInUseUsageDescription</key><value>使用程序的时候获取本机位置</value><key>NSLoc原创 2022-02-24 15:33:37 · 6405 阅读 · 1 评论 -
【iOS】—— 高德地图SDK基础使用
最近稍微学了学iOS调用高德的SDK,就随便做做笔记。一、准备工作:具体的准备工作高德的SDK的入门指南上将步骤都一一给出了,具体看看:iOS 高德地图-SDK下面那我就大概说说步骤:1.获取最新版的XCodeXcode版本至少在8.0之上。2.获取CocoaPods有这个环境的就可以不用管,没有的话可以看看这两篇:2021年CocoaPods安装方法 和 Getting Started。3.使用CocoaPods安装SDK如果该程序是第一次使用CocoaPods的话,就先使用下面代码创原创 2021-12-12 13:32:36 · 8551 阅读 · 1 评论 -
【iOS】—— UICollectionView基础
一、UICollectionView基础:1.简介:UICollectionView是iOS6之后引入的一个新的UI控件,在目前的iOS开发中,使用非常广泛。它和UITableView都继承自UIScrollView,但是它比UITableView更加强大,可以根据需要自定义各种各样复杂的布局。它和UITableView十分相似,并且很多代理方法都十分类,具体的可以看看苹果官方的文档:UICollectionView - Apple Developer2.特点:(1)系统自带的流水布局支持水平和垂原创 2021-12-05 14:53:01 · 4326 阅读 · 2 评论 -
【iOS】—— 调用手机相机和相册
在app开发过程中,会有很多需要调取摄像头的地方,例如上传头像,上传图片等,并且又的是会包含直接拍照或者是从相册取图片来完成上传的,这里我就大概给大家说说如何调用手机的相机和相册。一、UIImagePickerController:在我们使用代码来完成调取摄像头之前我们还需要了解了解UIImagePickerController,它是OC中一种视图控制器,用于管理用于拍照、录制电影和从用户媒体库中选择项目的系统界面。1.UIImagePickerController常见用途:调用摄像头拍照从相册原创 2021-11-24 21:19:57 · 3484 阅读 · 0 评论 -
【iOS】—— 第三周 学生管理系统所遇到的问题
一.APP界面该程序实现了基本的登陆注册以及数据的增删改查和排序。二.遇到的问题1.该开始对数据的存储方式不太熟悉,不知道如何保存并且在各个界面之间灵活传值。2.增加学生信息时的学生重名但是不重班的问题,该学生的信息也算是正确信息,但需对其进行存储。3.在修改学生信息的时候,返回原界面时对要修改的内容和学生信息不明确,可能修改错误。4.在实现姓名排序的时候,对汉字的排序没有思路,不知道怎么对其进行排序。5.在进行查找的时候,因为我使用的是三个数组,所以对其姓名查找可能会出现找到了但是有重原创 2021-08-06 09:19:04 · 154 阅读 · 0 评论 -
【iOS】—— 第一周 网易云界面所遇到的问题
一.APP的界面该程序一种实现了两个页面,设置页面和第一个发现页面,当你在每个页面时点击左上角的菜单按钮就会弹出设置页面,以及更换头像和渐变导航栏。二.遇到的问题1.在写设置页面时,cell的复用会出现问题。2.因为在点击菜单栏时设置页面会初始化一遍,其中uiswitch的状态也会被初始化,保持switch状态有问题。3.在制作自动轮播图时,使用了多个滚动视图,并且因为没有自定义cell,所以在完成时滚动视图之间会产生冲突,导致自动轮播图出现问题。4.在设置导航栏渐变时,系统自带的导航栏因原创 2021-07-23 09:11:38 · 504 阅读 · 0 评论 -
【iOS】—— 第二周 3Gshare所遇到的问题
一.APP的界面该程序实现了基本界面,以及上传头像和点赞分享。二.遇到的问题1.在写登陆和注册界面时的界面间传值会出现传值不成功的现象。2.在第一个界面的自定义cell中,点击进入相应的界面,点赞浏览及分享数不会同步。3.在写上传界面的作品属性时对tableview的使用理解的不够透彻,不会tableviewcell的收缩和展开。4.第三个界面的基础一开始掌握不熟,并且其头顶的选择框不知如何实现。三.解决方法1.要实现不同界面的传值必须要将所传递的属性进行初始化在赋值,利用协议原创 2021-07-30 09:13:12 · 167 阅读 · 0 评论 -
【Objective-C】引用计数
一.基本概念:自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术;苹果官方说明:在Objective-C中采用Automatic Reference Counting(ARC)机制,让编译器来进行内存管理。在新一代Apple LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码,这就降低程序崩溃、内存泄露等风险的同时,很大程度上减少了开发程序的工作量。编译器完全清除目标对象,并能立刻释放那些不再被使用原创 2021-09-23 17:40:12 · 239 阅读 · 0 评论 -
【iOS】—— MVC模式的学习
一.什么是MVC?MVC(Model View Controller)模型(model)-视图(view)-控制器(controller):MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子可以看出MVC就是Observer设计模式的一个特例。MVC是一个设计模式,它强制性的原创 2021-09-08 17:24:53 · 317 阅读 · 0 评论 -
【iOS】—— 知乎日报第一周遇到的问题
1.线程问题:在使用网络请求请求数据时,因为使用的是MVC模式,导致在请求到的数据没有返回的时候程序就已经开始了UI布局,导致UI中有需要用到获取到数据的地方程序崩溃,这里我将UI布局最终写在网络请求的Block回调中,解决这个问题,但是因为线程原因,它没有回到主线程再进行UI布局又导致程序崩溃,这时候需要将程序回到主线程然后再进行UI的布局。//获取网络请求- (void)GetNetworkModel { [[NetworkModel shareNetworkModel] Net原创 2021-10-24 16:13:04 · 309 阅读 · 0 评论 -
【iOS】—— Manager封装一个网络请求和JSONModel的使用
一.Manager封装一个网络请求:1.单例模式:为什么要用单例模式?1.在iOS开发过程中,需要使用到一些全局变量以及管理方法,可以将这些变量以及方法封装在一个管理类中,这是符合MVC开发模式的,这就需要使用单例(singleton)。2.使用单例模式的变量在整个程序中只需要创建一次,而它生命周期是在它被使用时创建一直到程序结束后进行释放的,类似于静态变量,所以我们需要考虑到它的生命周期,唯一性以及线程安全。在这里,我们需要实用GCD来实现单例模式:(保证线程安全, 不能确定代码的执行顺序,线程原创 2021-10-11 19:43:29 · 261 阅读 · 0 评论 -
Masonry的简单使用
配置CocoaPods要使用CocoaPods你必须得在你的MAC上配置CocoaPods,具体配置可以看2021年CocoaPods安装方法。CocoaPods的使用1.创建一个工程并且在终端中打开。//cd后面的是你创建的工程在电脑上的地址,你也可以直接把文件拖进去在终端中输入:$ cd 文件地址2.进来之后创建Podfile文件。终端输入:$ touch Podfile3.打开并编辑Podfile文件。终端输入:$ vim Podfile在进入界面后,再按i,下面的"Pods原创 2021-09-01 17:35:37 · 1019 阅读 · 1 评论 -
【iOS】—— 知乎日报第二周遇到的问题
1.当点击cell进入界面时,左右滑动切换时更新view会闪白屏并且会出现白屏的情况:2.下拉获取数据时,一次会获取多组数据,并且有时会不进入网络请求的block代码块,导致有些日期的数据获取不到:...原创 2021-10-28 20:32:56 · 1695 阅读 · 0 评论 -
【iOS】—— push和present的区别以及混用
一.push和present的相同点:push和present方法都可用于推出新的界面。push和pop对应使用。//推出视图 NextViewController *nextView = [[NextViewController alloc] init]; [self.navigationController pushViewController:nextView animated:YES];//返回上一级[self.navigationController popViewCon原创 2021-09-15 17:12:21 · 1451 阅读 · 0 评论 -
【iOS】—— 写计算器遇到的一些问题
一.用到的知识点:1.MVC设计模式2.Masonry布局3.简单四则运算4.中缀表达式转后缀表达式二.基本思路:首先创建一个字符串,对应计算器中的按钮点击,点击什么给该字符串添加什么字符,一切输入完毕之后按下=就表示输入完毕,再进行下面操作,首先对最后得到的字符串进行判断,判断该字符串的格式是否正确,然后再对其进行中缀转后缀的操作,最后进行计算操作返回最后的得数,将它显示在计算器的现实屏上计算器就完成了。写计算器没有什么太大的难度,最重要的是对前面所说的知识点的合理利用,让自己吸收之前自己学原创 2021-10-07 21:51:51 · 293 阅读 · 0 评论 -
【iOS】—— 知乎日报第四周遇到的问题
1.imageWithData获取图片为nil:imageWithData 使用分析原创 2021-11-12 20:31:04 · 2171 阅读 · 0 评论 -
【iOS】—— ViewController的生命周期
一.ViewController的基本介绍ViewController是iOS开发中MVC模式中的C,ViewController是View(视图)的Controller(控制器),ViewController的职责主要包括管理内部各个View的加载显示和卸载,同时负责与其他ViewController的通信和协调。在iOS中,有两类ViewController,一类是显示内容的,比如:UIViewController、UITableViewController等,同时还可以自定义继承自UIViewCo原创 2021-09-14 17:34:15 · 467 阅读 · 0 评论 -
UITableView的展开与收缩
一.前言在我们写程序时,总有些功能是需要UITableView的展开与折叠才能达到其想要的目的,所以在此写这篇博客作为笔记。二.思路1.重写UITableViewCell,可以按照自己的需求进行相应的重写。2.在一个可变的数组的长度作为UITableView返回的行数,达到UITableViewCell行数可变的目的。3.创建一个BOOL类型的属性,作为UITableView展开和收缩的判断值,在创建一个UIButton并添加事件来改变该BOOL类型的属性即控制UITableView的展开和收缩。原创 2021-09-04 15:56:06 · 662 阅读 · 0 评论