自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【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 1666 1

原创 【iOS开发】—— 消息传递和消息转发机制

iOS的消息发送和转发机制

2022-07-26 00:25:30 1617

原创 【iOS开发】—— iOS内存管理

iOS内存管理

2022-07-21 15:14:26 2927

原创 【iOS开发】—— 工厂模式

工厂模式属于创建型模式,主要是用来创建对象的时候使用。工厂类通常包含一个静态方法(类方法),由该方法根据输入类型负责创建具体的产品(对象)。它的作用是降低客户端和具体产品之间的耦合度。而且符合了开闭原则,以后需要加入新车型,客户端调用的代码也基本无需修改。真正实现业务逻辑的子类。主界面设置一个TextField和一个button 然后在button的点击事件中调用工厂方法进行创建不同的类的实例:创建一个工厂PhoneFactory,工厂通过传递的NSString*类型的值进行判断所属类型从而创建类的实例,

2022-06-12 20:40:04 2082

原创 【iOS开发】—— AFNetWorking源码(二)

上一篇介绍了NSURLSession中的两个类,这次介绍一下Serialization序列化中的两个类。序列化类AFURLRequestSerialization这个类是Request的序列化器,通过这个类将网络请求的相关配置生成NSURLRequest供task对象使用,声明文件里面有两个协议AFURLRequestSerialization 和AFMultipartFormData ;三个类AFHTTPRequestSerializer 、AFJSONRequestSerializer、AFPro

2022-05-29 16:35:56 431

原创 【iOS开发】 —— AFNetWorking源码(一)

文章目录简介组织架构图通讯核心类AFHTTPSessionManager简介属性和接口方法一:创建AFHTTPSessionManager对象方法二:初始化该对象方法三:方法四:GET网络请求方法五:POST网络请求方法六:简介AFNetworking是适用于iOS,macOS,watchOS和tvOS的的网络库。它构建于Foundation URL系统之上,扩展了Cocoa内置的强大的高级网络抽象。它采用模块化架构,设计精良,功能丰富的API,使用起来非常简单。组织架构图通讯核心类AFHTTP

2022-05-22 16:03:47 675

原创 【iOS开发】—— SDWebImage源码学习(未完)

文章目录什么是SDWebImage?sd_setImageWithURL使用步骤UIImageView+WebCacheUIView+WebCacheSDWebImageManagerSDImageCacheSDWebImageDownloader其余:什么是SDWebImage?SDWebImage是iOS开发中被广泛使用的第三方开源库,它提供了图片从加载、解析、缓存、清理等一系列功能。平时我们引进这个第三方库,最主要的就是使用sd_setImageWithURL方法。下面是他的官方调用图:通过

2022-04-24 17:05:53 2220

原创 【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 4147

原创 【iOS开发】—— 图片转化成base64编码

一、图片转 Base64字符串 UIImage * image = [UIImage imageNamed:@"图片名称"]; NSData * imageData = UIImageJPEGRepresentation(image, 1); NSString * base64Str = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];二、base64转化成图

2022-04-13 21:32:58 6272

原创 【iOS开发】—— GET和POST网络请求

NSURLSession的简介和使用,以及POST和GET网络请求的使用。

2022-03-25 14:36:54 3477

原创 【iOS开发】—— 自定义选择器实现日期选择器

自定义选择器实现日期选择器

2022-03-23 13:24:09 6619

原创 【报错】warning: templates not found in /usr/local/git/share/git-core/templates

warning: templates not found in /usr/local/git/share/git-core/templates

2022-03-20 17:30:09 7240 1

原创 【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 3876

原创 【Effective Objective-C】—— 系统框架

文章目录熟悉系统框架要点:多用块枚举,少用for循环使用Objective-C 1.0的NSEnumerator来遍历快速遍历基于块的遍历方式要点:对自定义其内存管理语义的collection使用无缝桥接要点:构建缓冲时选用NSCache而非NSDictionary要点:精简initialize与load的实现代码熟悉系统框架框架:将一系列代码封装为动态库,并在其中放入描述其接口的头文件,这样做出来的东西就叫做框架。有时为iOS平台而构造的第三方框架所使用的是静态库,但所有iOS平台的系统框架仍然使用

2022-03-11 22:20:47 2179

原创 【Effective Objective-C】—— 块与大中枢派发

文章目录概述理解“块”这一概念块的基础知识块的内部结构全局块、栈块、堆块要点:为常用的块类型创建typedef要点用handler块降低代码分散程度具体Blocks底层的学习可以参考这篇博客:【iOS开发】—— 一文搞懂blocks底层源码概述当前多线程编程的核心就是“块”与“大中枢派发”。GCD是一种与块相关的技术,它提供了对线程的抽象,而这种抽象则基于“派发队列”(dIspatch queue)。开发者可将块排入到派发队列中,由GCD负责处理所有的调度事宜。理解“块”这一概念“块”是一种可在C

2022-03-10 17:24:10 2207

原创 【iOS开发】—— 调用地图SDK完成对附近地点的获取

最近在写项目的时候,首页打算加一个地图SDK,并且在地图上标记出附近的球馆。由于附近球馆比较少,示例用电影院。第一步:导入第三方库首先要完成第三方库的导入:在这个实现中,主要需要导入下面三个库:AMap3DMap(用于显示地图)AMapLocation 定位SDKAMapSearch搜索SDK导入的时候可以通过CocoaPods,可以看这篇博客去配置:【iOS开发】——CocoaPods的基本使用第二步:设置info.plist第三步:添加地图 _mapView = [[MAMap

2022-03-06 14:21:49 2536

原创 【iOS开发】—— 通过URL Scheme调用外部地图软件

写项目时,涉及到一个导航到球馆的功能,可以选择在app里加一个地图,但是这个方案接入要一定的时间,还会增加APP的内存占用;所以我选择了通过URL Scheme去调用手机已安装的导航软件来进行导航,这里我用高德地图,腾讯地图、苹果地图来举例。第一步:配置info.plist文件在 iOS 9 之后我们做跳转是需要有个白名单的,添加白名单的方法就是在 info.plist 文件里面,添加一个字段LSApplicationQueriesSchemes 类型为数组,然后在这个数组里面再添加我们所需要的地图

2022-02-27 18:29:10 1812

原创 【iOS开发】—— 一浅谈blocks底层源码

文章目录概述什么是Blocks?Blocks模式Block语法Block类型变量截获自动变量值__block的说明符截获的自动变量Blocks的实现概述什么是Blocks?Blocks是C语言的扩充功能。用一句话来表示Blocks的扩充功能:带有自动变量(局部变量)的匿名函数。但是在C语言的标准中不允许存在匿名函数。通过Blocks,源代码中就可以使用匿名函数。Blocks模式Block语法完整形式的Block语法与一般的C语言函数定义相比,仅有两点不同:没有函数名返回值类型前带有“^”

2022-02-20 00:54:29 1156

原创 【Effective Objective-C】——内存管理

文章目录理解引用计数参考博客:引用计数工作原理属性存取方法中的内存管理自动释放池保留环以ARC简化引用计数使用ARC时必须遵循的方法命名规则变量的内存管理语义ARC如何清理实例变量覆写内存管理方法在dealloc方法中只释放引用并解除监听编写“异常安全代码”时留意内存管理问题以弱引用避免保留环以“自动释放池块”降低内存峰值用“僵尸对象”调试内存管理问题不要使用retainCount理解引用计数参考博客:【iOS开发】—— 自动引用计数初步学习【iOS开发】——引用计数的简单了解引用计数工作原理在

2022-02-12 01:37:04 1788

原创 【Effective Objective-C】——协议与分类

文章目录概述通过委托与数据源协议进行对象间通信将类的实现代码分散到便于管理的数个分类之中总是为第三方类的分类名称加前缀勿在分类中声明属性使用“class-continuation分类” 隐藏实现细节通过协议提供匿名对象概述Objective-C语言有一项特性叫做“协议”,它与Java的“接口”类似。因为Objective-C语言不支持多重继承,因而我们把某个类应该实现的方法定义在协议里面。“分类”也是Objectve-C的一项基本重要语言特性。利用分类机制,无需继承子类即可直接为当前类添加方法,而在

2022-02-06 22:48:58 374

原创 【Effective Objective-C】——接口与API设计

文章目录概述用前缀避免命名空间重复概述开源社区以及开源组件随着iOS开发而流行起来,所以我们 经常会在开发自己的应用程序时使用他人的代码。所以我们要把代码写的清晰一些,以便其他开发者能够迅速而方便的将其集成到他们的项目里。用前缀避免命名空间重复Object-C没有其他语言那种内置的命名空间机制,所以我们在起名时要设法避免潜在的命名冲突。如果发生命名冲突,那么应用程序的链接过程就会出错。比无法链接更糟糕的情况是,在运行期载入了含有重名类的程序库。此时,“动态加载器”就遭遇了“重名符号错误”,很可能

2022-01-22 01:34:31 2465

原创 【Effective Objective-C】——对象、消息、运行期

文章目录概述理解“属性”这一概念概述OC是面向对象语言,其中“对象”就是基本 “基本构造单元”;在对象之间传递数据并执行任务的过程就叫做 “消息传递”;当应用程序运行起来后,为其提供相关支持的代码就称为 “Objective-C的运行期环境”。理解“属性”这一概念“属性”是Objective-C的一项特性...

2022-01-19 20:57:04 2479

原创 【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 2026

原创 【iOS开发】—— UICollectionView的介绍

UICollectionView的简单学习

2021-12-07 22:47:31 5710

原创 【数据结构】——树(超详细)

数据结构树的相关内容:二叉树、哈夫曼树、完全二叉树、不完全二叉树、线索二叉树、二叉树的创建和遍历:中序遍历、先序遍历、后序遍历。

2021-11-30 21:24:56 1475

原创 【iOS开发】——使用Sourcetree和GitHub实现项目的多人合作

在和其他人写项目的时候,我们都是分模块去写,所以就想把自己所写的内容都汇总到一个文件里,我们可以用git自带的多人合作模式,这个可以看这个大佬的博客。我今天说一下另一种方式,使用一款app结合git达到一个两人合作,为什么用这个软件?是因为这个软件可以使git的分支可视化,就像下图一样。正式介绍一下今天的主角:Sourcetree。什么是Sourcetree?...

2021-11-29 22:49:56 2296 2

原创 【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 2022

原创 【git】——因本地git的存在造成的上传问题

最近在上传项目的时候,总是上传上去打不开,有一个小箭头。然后回去找上传步骤,发现有下面这个警告:warning: adding embedded git repository: [文件名]这是因为这个项目存在本地git,也就是存在一个.git文件,然后我们去找这个.git文件,你会发现无论是搜索还是挨个找,都找不到这个文件,,原因是电脑会把一部分文件隐藏,所以也就没法删除了。那我们就想办法让它出现。defaults write com.apple.finder AppleShowAllFiles

2021-11-29 13:33:14 1782

原创 【iOS开发】—— 调用相机、相册

在大部分app中,都是会使用到调用相机和相册的,所以学习app开发就必须要学习一下调用相机和相册。首先要先了解一下UIImagePickerController。一、UIImagePickerControllerUIImagePickerController是iOS系统提供的和系统的相册和相机交互的一个类,可以用来获取相册的照片,也可以调用系统的相机拍摄照片或者视频。该类的继承结构是:UIImagePickerController–>UINavigationController–>UI

2021-11-27 21:43:48 2148

原创 【iOS开发】—— 知乎日报第二周总结

一、自动轮播图的实现之前写demo的时候都是照抄网上或者复制的,没有真正的学会,这周我花费了一段时间自己敲出来,首先是要实现无限轮播:我的思路就是在图片的左边再加一张最后一张图片,在右边再加一张第一张图片,然后当到了最左边的时候,将UIScrollView的左边变到最后一张图片,右边同理。如下图:我这里是一共5张图片//W位屏宽- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (self.scrollView.con

2021-10-31 21:11:55 345

原创 【iOS开发】—— Manage封装一个网络请求

上篇文章写了如何使用JSONModel,我把网络请求的内容写到了ViewController的viewDidLoad中, 而实际中使用的时候并不能这么简单 对于不同的需要,我们需要有不同的网络请求,所以我们可以用单例模式,创建一个全局的Manage类,用实例Manage来执行网络请求方法,顺便用Manage传递请求数据,在model里完成数据解析。所使用到的技术1.单例模式的使用2.block传值具体示例:我们还是用知乎日报的接口来举例://Manager.h#import "JSONMode

2021-10-14 19:44:23 238

原创 【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 891

原创 【iOS开发】—— 仿写计算器

所需知识一、Masonry二、MVC设计模式三、中缀转后缀四、四则运算(加括号)基本思路首先在M、V和C的相关内容,然后通过点击按钮并向字符串中添加对应的字符,然后在M中对字符串进行相关数据处理。按钮布局处理使用Masony: _buttonArray = [[NSArray alloc] initWithObjects:_buttonDelete, _buttonLeft, _buttonRight, _buttonDivide, _buttonSeven, _buttonEigh

2021-10-08 22:15:19 259

原创 【iOS开发】—— KVC

KVC简述:KVC相信大家再熟悉不过了,键值编码,可以解决很多问题,包括视图上的给UITextField占位文字颜色大小进行设置,获取系统视图进行其颜色样式的自定义,模型转换等等,很多地方可以用KVC,接下来我们就深度解析总结一下KVC。 在iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。KVC的使用使用一:为属性赋值使用二:为成

2021-09-27 21:16:16 246

原创 C语言实现简易四则运算

对于简易的四则运算,需要知道的也是最重要的一点就是:先乘除后加减,所以就不可以从左到右依次计算,要将输入的中缀表达式转换成后缀表达式。不会这一方法的可以先看我的这篇博客了解一下。思路:将输入的表达式中的数字放到一个栈,再把运算符放到一个栈,由于先加减后乘除的特性,所以我要比较运算符的等级,然后再决定是否放入栈内。如果要判断的运算符的优先级小于栈顶所存放的运算符的优先级,则取出数字栈中的上面两个数字进行运算,然后将结果放入数字栈内;如果要判断的运算符优先级大于运算符栈顶存放的运算符的优先级,则把它入栈

2021-09-27 20:47:29 3552

原创 中缀表达式转后缀表达式

什么是中缀表达式中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的。什么是后缀表达式后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。为什么中缀表达式要转成后缀表达式因为对于计算机来说,后缀表达式要比中缀表达式更加容易计算。中缀表达式转后缀表达式的规则从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它

2021-09-27 20:30:05 282

原创 【数据结构】—— 栈和队列

文章目录栈栈的定义栈的基本思想栈栈的定义是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈又称为*后进先出(Last In First Out)的线性表,简称LIFO结构。栈的基本思想...

2021-09-26 21:22:07 210

原创 【iOS开发】—— 自动引用计数初步学习

文章目录什么是自动引用计数?内存管理/引用计数内存管理的思考方式自己生成的对象,自己持有什么是自动引用计数?==是指内存管理中对引用采取自动计数的技术。==以下是摘自苹果的官方说明:在Objective-C中采用ARC(Automatic Reference Counting)机制,让编译器来进行内存管理。在新一代Apple LLYM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在降低程序崩溃、内存泄漏等风险的同时,很大程度上减少了开发程序的工作量。编译器完全清楚

2021-09-23 22:54:21 376

原创 【iOS开发】—— 单例模式

参考文章[iOS开发]单例模式iOS—单例模式文章目录什么是单例模式系统提供的单例类举例单例模式使用的时机单例模式的优缺点举例:什么是单例模式一个单例类,在整个程序中只有一个实例,这个实例被创建以后,就一直到这个程序(APP)结束后系统才会自动释放这块内存,而且一旦你创建了一个单例类,不论你在多少个界面中初始化调用了这个单例方法取得对象,它们所有的对象都是指向的同一块内存存储空间(即单例类保证了该类的实例对象是唯一存在的一个)。简单来说就是:保证整个系统中一个类只有一个对象的实例,实现这种功能的

2021-09-15 23:05:13 475

原创 【iOS开发】—— viewController的生命周期

首先先阐明ViewController的职责:对内管理与之关联的View,对外跟其他ViewController通信和协调。对于与之关联的View,ViewController总是在需要的时候才加载视图,并在不需要的时候卸载视图,所以也同时担当了管理应用资源的责任。理解ViewController的LifeCycle(生命周期),能够有效地管理应用资源。OC下的调用方法和调用顺序调用顺序方法方法介绍1- (void)loadView {}loadView做了一些加载View.

2021-09-15 17:16:10 330

空空如也

空空如也

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

TA关注的人

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