OC
文章平均质量分 81
轩墨️
这个作者很懒,什么都没留下…
展开
-
【iOS开发】—— weak底层原理
runtime维护了一个weak表。用于存储指向某个对象的所有weak指针。weak表其实是一个weak_table_t结构的hash表,key是所指对象的地址,value是weak指针的地址数组。初始化时,runtime会对其使用函数,初始化一个新的weak指针指向对象的地址函数会调用函数,的作用是用于更新指针指向,创建弱引用表。释放时,调用函数。函数首先根据对象地址获取所有weak指针数组,然后遍历这个数组,把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。......原创 2022-07-30 21:55:39 · 1565 阅读 · 2 评论 -
【iOS开发】—— 消息传递和消息转发机制
iOS的消息发送和转发机制原创 2022-07-26 00:25:30 · 1494 阅读 · 0 评论 -
【iOS开发】—— iOS内存管理
iOS内存管理原创 2022-07-21 15:14:26 · 2816 阅读 · 0 评论 -
【iOS开发】—— 工厂模式
工厂模式属于创建型模式,主要是用来创建对象的时候使用。工厂类通常包含一个静态方法(类方法),由该方法根据输入类型负责创建具体的产品(对象)。它的作用是降低客户端和具体产品之间的耦合度。而且符合了开闭原则,以后需要加入新车型,客户端调用的代码也基本无需修改。真正实现业务逻辑的子类。主界面设置一个TextField和一个button 然后在button的点击事件中调用工厂方法进行创建不同的类的实例:创建一个工厂PhoneFactory,工厂通过传递的NSString*类型的值进行判断所属类型从而创建类的实例,原创 2022-06-12 20:40:04 · 1951 阅读 · 0 评论 -
【iOS开发】—— AFNetWorking源码(二)
上一篇介绍了NSURLSession中的两个类,这次介绍一下Serialization序列化中的两个类。序列化类AFURLRequestSerialization这个类是Request的序列化器,通过这个类将网络请求的相关配置生成NSURLRequest供task对象使用,声明文件里面有两个协议AFURLRequestSerialization 和AFMultipartFormData ;三个类AFHTTPRequestSerializer 、AFJSONRequestSerializer、AFPro原创 2022-05-29 16:35:56 · 332 阅读 · 0 评论 -
【iOS开发】 —— AFNetWorking源码(一)
文章目录简介组织架构图通讯核心类AFHTTPSessionManager简介属性和接口方法一:创建AFHTTPSessionManager对象方法二:初始化该对象方法三:方法四:GET网络请求方法五:POST网络请求方法六:简介AFNetworking是适用于iOS,macOS,watchOS和tvOS的的网络库。它构建于Foundation URL系统之上,扩展了Cocoa内置的强大的高级网络抽象。它采用模块化架构,设计精良,功能丰富的API,使用起来非常简单。组织架构图通讯核心类AFHTTP原创 2022-05-22 16:03:47 · 606 阅读 · 0 评论 -
【iOS开发】—— SDWebImage源码学习(未完)
文章目录什么是SDWebImage?sd_setImageWithURL使用步骤UIImageView+WebCacheUIView+WebCacheSDWebImageManagerSDImageCacheSDWebImageDownloader其余:什么是SDWebImage?SDWebImage是iOS开发中被广泛使用的第三方开源库,它提供了图片从加载、解析、缓存、清理等一系列功能。平时我们引进这个第三方库,最主要的就是使用sd_setImageWithURL方法。下面是他的官方调用图:通过原创 2022-04-24 17:05:53 · 2130 阅读 · 0 评论 -
【iOS开发】—— nil、Nil、NSNull和NULL
文章目录nilNilNULLNSNull分析nilnil是用来表示一个对象是空对象,即想要表示此对象不存在。给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉;或者对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象被置为nil。NilNil是用来表示一个类是空类。比如:Class myClass = Nil;。和nil没有明确的区分,也就是说凡是使用nil的地方都可以用Nil来代替,反之亦然。约定俗成地将nil表示一个空对象,Nil表示一个空类。NULLNULL是原创 2022-04-17 17:58:08 · 3952 阅读 · 0 评论 -
【iOS开发】—— 图片转化成base64编码
一、图片转 Base64字符串 UIImage * image = [UIImage imageNamed:@"图片名称"]; NSData * imageData = UIImageJPEGRepresentation(image, 1); NSString * base64Str = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];二、base64转化成图原创 2022-04-13 21:32:58 · 6070 阅读 · 0 评论 -
【iOS开发】—— GCD
文章目录GCD概述什么是GCD?多线程编程GCD的APIDispatch Queuedispatch_queue_createMain Dispatch Queue/Global Dispatch Queuedispatch_set_target_queuedispatch_afterGCD概述什么是GCD?GCD(Grand Center Dispatch)是异步执行任务的技术之一。开发者定义想执行的任务并且追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。多线程原创 2022-03-19 23:45:44 · 3729 阅读 · 0 评论 -
【iOS开发】—— 一浅谈blocks底层源码
文章目录概述什么是Blocks?Blocks模式Block语法Block类型变量截获自动变量值__block的说明符截获的自动变量Blocks的实现概述什么是Blocks?Blocks是C语言的扩充功能。用一句话来表示Blocks的扩充功能:带有自动变量(局部变量)的匿名函数。但是在C语言的标准中不允许存在匿名函数。通过Blocks,源代码中就可以使用匿名函数。Blocks模式Block语法完整形式的Block语法与一般的C语言函数定义相比,仅有两点不同:没有函数名返回值类型前带有“^”原创 2022-02-20 00:54:29 · 1089 阅读 · 0 评论 -
【Effective Objective-C】——内存管理
文章目录理解引用计数参考博客:引用计数工作原理属性存取方法中的内存管理自动释放池保留环以ARC简化引用计数使用ARC时必须遵循的方法命名规则变量的内存管理语义ARC如何清理实例变量覆写内存管理方法在dealloc方法中只释放引用并解除监听编写“异常安全代码”时留意内存管理问题以弱引用避免保留环以“自动释放池块”降低内存峰值用“僵尸对象”调试内存管理问题不要使用retainCount理解引用计数参考博客:【iOS开发】—— 自动引用计数初步学习【iOS开发】——引用计数的简单了解引用计数工作原理在原创 2022-02-12 01:37:04 · 1717 阅读 · 0 评论 -
【Effective Objective-C】——接口与API设计
文章目录概述用前缀避免命名空间重复概述开源社区以及开源组件随着iOS开发而流行起来,所以我们 经常会在开发自己的应用程序时使用他人的代码。所以我们要把代码写的清晰一些,以便其他开发者能够迅速而方便的将其集成到他们的项目里。用前缀避免命名空间重复Object-C没有其他语言那种内置的命名空间机制,所以我们在起名时要设法避免潜在的命名冲突。如果发生命名冲突,那么应用程序的链接过程就会出错。比无法链接更糟糕的情况是,在运行期载入了含有重名类的程序库。此时,“动态加载器”就遭遇了“重名符号错误”,很可能原创 2022-01-22 01:34:31 · 2392 阅读 · 0 评论 -
【Effective Objective-C】——对象、消息、运行期
文章目录概述理解“属性”这一概念概述OC是面向对象语言,其中“对象”就是基本 “基本构造单元”;在对象之间传递数据并执行任务的过程就叫做 “消息传递”;当应用程序运行起来后,为其提供相关支持的代码就称为 “Objective-C的运行期环境”。理解“属性”这一概念“属性”是Objective-C的一项特性...原创 2022-01-19 20:57:04 · 2434 阅读 · 0 评论 -
【Effective Objective-C】——熟悉Objective-C
第一条:了解Objective-C的起源Objective-C由Smalltalk(“消息型语言”的鼻祖)演化而来,所以Objective-C使用的是“消息结构”而非“函数调用”。二者的区别就像下面这样://Messaging (Objective-C)Object *obj = [Object new];[obj performWith:parameter1 and:parameter2];//Function calling (C++) Object *obj = new Object;原创 2022-01-15 20:16:51 · 1976 阅读 · 0 评论 -
【iOS开发】—— UICollectionView的介绍
UICollectionView的简单学习原创 2021-12-07 22:47:31 · 5599 阅读 · 0 评论 -
【iOS开发 】—— FMDB的使用
在仿写知乎日报app的时候,收藏的文章要存放在数据库中,所以需要用到OC封装好的FMDB数据库。文章目录什么是FMDB?FMDB的优点常使用的类FMDB的使用举例创建数据库创建表插入数据删除数据遍历数据库什么是FMDB?OS中使用C语言函数对原生SQLite数据库进行增删改查操作,复杂麻烦,于是,就出现了一系列将SQLite API封装的库。FMDB是针对libsqlite3框架进行封装的三方,它以OC的方式封装了SQLite的C语言的API,使用步骤与SQLite相似。FMDB的优点FMDB面原创 2021-11-29 19:58:42 · 1981 阅读 · 0 评论 -
【iOS开发】—— Manage封装一个网络请求
上篇文章写了如何使用JSONModel,我把网络请求的内容写到了ViewController的viewDidLoad中, 而实际中使用的时候并不能这么简单 对于不同的需要,我们需要有不同的网络请求,所以我们可以用单例模式,创建一个全局的Manage类,用实例Manage来执行网络请求方法,顺便用Manage传递请求数据,在model里完成数据解析。所使用到的技术1.单例模式的使用2.block传值具体示例:我们还是用知乎日报的接口来举例://Manager.h#import "JSONMode原创 2021-10-14 19:44:23 · 215 阅读 · 0 评论 -
【iOS开发】—— JSONModel的使用
什么是JSONModel?JSONModel:一个解析 JSON 数据的开源库,可以将 JSON 数据直接解析成自定义的model。使用JSONModel前的准备工作与Masonry的使用相同,需要先导入第三方库,不会这个操作的可以看我之前写的**这篇文章。**与Masonry不同的是:将pod 后面的‘Masonry’改为‘JSONModel’即可。platform :ios, '7.0'target 'test2' dopod 'JSONModel'end//target后面的单引号里原创 2021-10-11 21:32:39 · 848 阅读 · 0 评论 -
【iOS开发】—— 仿写计算器
所需知识一、Masonry二、MVC设计模式三、中缀转后缀四、四则运算(加括号)基本思路首先在M、V和C的相关内容,然后通过点击按钮并向字符串中添加对应的字符,然后在M中对字符串进行相关数据处理。按钮布局处理使用Masony: _buttonArray = [[NSArray alloc] initWithObjects:_buttonDelete, _buttonLeft, _buttonRight, _buttonDivide, _buttonSeven, _buttonEigh原创 2021-10-08 22:15:19 · 219 阅读 · 0 评论 -
【iOS开发】—— KVC
KVC简述:KVC相信大家再熟悉不过了,键值编码,可以解决很多问题,包括视图上的给UITextField占位文字颜色大小进行设置,获取系统视图进行其颜色样式的自定义,模型转换等等,很多地方可以用KVC,接下来我们就深度解析总结一下KVC。 在iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。KVC的使用使用一:为属性赋值使用二:为成原创 2021-09-27 21:16:16 · 204 阅读 · 0 评论 -
【数据结构】—— 栈和队列
文章目录栈栈的定义栈的基本思想栈栈的定义是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈又称为*后进先出(Last In First Out)的线性表,简称LIFO结构。栈的基本思想...原创 2021-09-26 21:22:07 · 183 阅读 · 0 评论 -
【iOS开发】—— 自动引用计数初步学习
文章目录什么是自动引用计数?内存管理/引用计数内存管理的思考方式自己生成的对象,自己持有什么是自动引用计数?==是指内存管理中对引用采取自动计数的技术。==以下是摘自苹果的官方说明:在Objective-C中采用ARC(Automatic Reference Counting)机制,让编译器来进行内存管理。在新一代Apple LLYM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在降低程序崩溃、内存泄漏等风险的同时,很大程度上减少了开发程序的工作量。编译器完全清楚原创 2021-09-23 22:54:21 · 336 阅读 · 0 评论 -
【iOS开发】—— 单例模式
参考文章[iOS开发]单例模式iOS—单例模式文章目录什么是单例模式系统提供的单例类举例单例模式使用的时机单例模式的优缺点举例:什么是单例模式一个单例类,在整个程序中只有一个实例,这个实例被创建以后,就一直到这个程序(APP)结束后系统才会自动释放这块内存,而且一旦你创建了一个单例类,不论你在多少个界面中初始化调用了这个单例方法取得对象,它们所有的对象都是指向的同一块内存存储空间(即单例类保证了该类的实例对象是唯一存在的一个)。简单来说就是:保证整个系统中一个类只有一个对象的实例,实现这种功能的原创 2021-09-15 23:05:13 · 433 阅读 · 0 评论 -
【iOS开发】—— viewController的生命周期
首先先阐明ViewController的职责:对内管理与之关联的View,对外跟其他ViewController通信和协调。对于与之关联的View,ViewController总是在需要的时候才加载视图,并在不需要的时候卸载视图,所以也同时担当了管理应用资源的责任。理解ViewController的LifeCycle(生命周期),能够有效地管理应用资源。OC下的调用方法和调用顺序调用顺序方法方法介绍1- (void)loadView {}loadView做了一些加载View.原创 2021-09-15 17:16:10 · 289 阅读 · 0 评论 -
【iOS开发】——present和push
假期写UI的时候就遇到了到底是使用present还是使用push,二者虽都可以推出新界面,但是用法等方面略有不同。一、 present与push之间的不同点和相同点共同点push与present都可以推出新的界面。不同点present与dismiss对应,push和pop对应。present只能逐级返回,push所有视图由视图栈控制,可以返回上一级,也可以返回到根vc,其他vc。present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换。二、二者的使用方法pr.原创 2021-09-14 20:12:30 · 547 阅读 · 0 评论 -
【iOS开发】—— MVC模式
文章目录MVC简介三者之间的关系详解iOS的MVC各层职责MVC的优缺点MVC简介MVC是Model-VIew-Controller,就是模型-视图-控制器,MVC把软件系统分为三个部分:Model,View,Controller。在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不属于另外两个。MVC 的几个明显的特征和体现:1、View 上面显示什么东西,取决于 Model。2、只要 Model 数据改了,View 的显示状态会跟着更改。Model原创 2021-09-11 19:00:35 · 479 阅读 · 0 评论 -
【iOS开发】——masonry的基本使用
在写OC的UI时,当在不同的机型上运行时,如果只用frame则会导致视图中的控件严重变形,这是因为不同机型的屏幕大小不一样,所以这周学习了masonry,掌握了一些基本用法。在使用第三方库Masonry之前,需要先安装CocoaPods。文章目录CocoaPods的安装Masonry的基本使用三个约束CocoaPods的安装安装教程安装好后,创建一个工程“test2”,创建结束后在终端输入以下代码:cd /Users/haoqianbiao/Desktop/test2 //文件的路径然后在原创 2021-09-04 22:30:50 · 1499 阅读 · 2 评论 -
【iOS开发】——属性关键字
在定义属性的时候,都需要为属性加特性,属性的特性决定了属性在原子性、读写权限以及内存管理的特性。目前属性关键字一共有8个,可以分为3类,对应上面的3个方面。第一类原子性(atomic,nonatomic)(1)atomic(默认)atomic意为操作是原子的,即是只能通过单个线程去访问实例变量。如何去限制只有一个线程去访问实例变量?这种特性下,由系统自动生成的setter/getter方法会加锁,但是即使这样也不能一定保证线程安全,而且比较耗时,所以我们一般不选用atomic。(2)non.原创 2021-08-07 11:22:22 · 301 阅读 · 0 评论 -
【iOS开发】——引用计数的简单了解
在学iOS属性的特性的时候,内存管理方面的“四大天王”让我不得不去了解一下引用计数。参考文章IOS引用计数也许并不是你想的那样iOS开发—内存管理与引用计数iOS 引用计数刚开始查阅的时候,发现有博客说:观点一:引用计数就是有几个指向同一个地址的指针。观点二:不要把IOS里的引用计数理解成了有几个指针指向对象,引用计数就是几。先把appDelegate的ARC关闭。在Xcode上输入以下代码:当创建一个对象时,无论是用[*** new]还是 [[*** alloc ] init];.原创 2021-08-06 16:53:45 · 785 阅读 · 0 评论 -
暑期第三周总结
文章目录本周任务遇到的问题聊天界面学生管理系统传值的三种方法及懒加载GitHub 地址本周任务1.完成第二周share的聊天界面2.完成学生管理系统3.学习block传值、KVO传值、通知传值、以及懒加载遇到的问题聊天界面聊天框的框的大小随着文字长度进行变化:一开始没有思路,后来找学姐的博客,然后看到,原来有一个“方法”:boundingRectWithSize: options: attributes: context:用于计算自适应高度NSDictionary *attri = @原创 2021-08-05 16:37:18 · 185 阅读 · 0 评论 -
【iOS开发】——block传值
block传值原创 2021-08-04 09:54:07 · 530 阅读 · 0 评论 -
【iOS开发】——懒加载
懒加载的使用原创 2021-08-04 09:05:01 · 318 阅读 · 0 评论 -
【iOS开发】——通知传值
通知传值的使用原创 2021-08-03 21:05:06 · 852 阅读 · 0 评论 -
【iOS开发】——KVO传值
KVO的使用原创 2021-08-03 19:38:36 · 470 阅读 · 0 评论 -
暑期第二周总结
在仿写share时,遇到了一些问题,现在写完了做一个个总结。一、UITableView显示不全二、无限轮播图三、获取父视图四、设定字体颜色和大小五、设置导航栏右上角按钮样式原创 2021-08-03 11:41:50 · 120 阅读 · 0 评论 -
【iOS开发】—— 属性传值与协议传值
在写OC界面时,我们经常会需要传值。传值的两种方式一 属性传值:从前到后的传值方式属性传值是将需要的值从前面的界面传入到后面的界面的一种传值方式。在进入下一界面时,下一界面的viewDidLoad还没有加载。所以我们可以在后一界面设置一个接受第一个界面传入的值的属性,而这个值时一个界面的属性。示例:从界面First将一个字符串传到界面Second//SecondViewController.h@property (nonatomic,copy) NSString secondText;//原创 2021-07-26 21:56:33 · 208 阅读 · 0 评论 -
暑假第一周任务总结
第一周主要的任务1.完成对UI控件的学习2.完成ZARA首页以及微信“我的”界面的仿写2.完成网易云音乐的部分仿写在仿写时遇到了一些问题问题一 cell的复用问题当写tableview时,就会出现cell的复用问题,会出现往上滑或往下滑的时候,会出现之前设置好的样式发生变化,会产生很多的控件叠在一起。我所解决的方法是使用注册的方法,为自己需要的每一种类型的单元格设置标识符,然后再对单元格使用,这样就相当于在复用池中有不同类型的单元格就不会出现复用的情况了。具体使用方法。问题二 多界面传值的问原创 2021-07-25 01:33:39 · 139 阅读 · 0 评论 -
【iOS】——自定义cell的方式
复用cell的两种方式分为注册和不注册,二者的区别主要是:注册情况下需要cell时不需要手动判断cell的获取是否为空,因为注册时dequeueReusableCellWithIdentifier:forIndexPath:在内部处理了这个过程,使得最后返回的都是可用的cell。.原创 2021-07-20 16:16:48 · 327 阅读 · 1 评论 -
【iOS】 Foundation 字典
1.NSDictionary的功能和用法 2.对NSDictionary的key排序。3.对NSDictionary的key进行过滤。4.使用自定义作为NSDictionary的key。5.NSMutableDictionary的功能与用法原创 2021-06-14 21:24:42 · 172 阅读 · 0 评论