
【iOS】内存:从页面状态、Memory Footprint 到 OOM
从“地址在哪里”走向“现在占用多少”:梳理页面如何成为 Clean、Dirty 与 Compressed,Memory Footprint 如何增长,以及 iOS 如何处理内存压力与 OOM。

【iOS】内存地图:从虚拟地址空间到 VM Region
从操作系统虚拟内存出发,梳理 iOS App 的地址空间、Mach-O、五大分区、堆栈与 VM Region,用 LLDB 实验验证变量、指针与对象的真实位置。

【iOS】Runtime - Part 1 && 对象与类的本质
从 objc_object、isa_t、Tagged Pointer、对象内存布局一路拆到类与对象的本质,梳理 Objective-C Runtime 中对象如何关联到类。

【iOS】Runtime - Part 3 && Category:加载、覆盖与关联对象
承接对象/类结构与消息发送机制,梳理 Category 的编译产物、运行时加载、方法列表附加、同名方法覆盖现象、+load/+initialize 差异与关联对象原理。

【iOS】SDK
SDK SDK 是Software Development Kit的缩写,译为” 软件开发工具包 ”,通常是为辅助开发某类软件而编写的特定软件包,框架集合等, SDK 一般包含相关 文档 , 范例 和 工具 。客户端 SDK,顾名思义,是集成在应用客户端的 SDK。SDK 作为产

【iOS】block
block 对应结构体的定义如下: 图中我们可以看到,isa其实有六个部分 isa指针,所以对象都有isa指针。这就证明了 block其实本质上就是一个Objective C对象 ,他的值通常是这三种 NSConcreteGlobalBlock (全局区:没捕获任何外部变量) N

【iOS】MVVM
MVC模式 MVC的前世: 这个架构中,三个实体联系太过紧密,每个实体都知道另外的两个实体。这就导致了复用性能急剧下降。 apple MVC : 苹果官方推荐使用的MVC,结构大致如下:https://developer.apple.com/library/archive/doc

【iOS】SDWebImage解析
笔者最近在完成抖音关注页面的仿写过程中了解到可以使用SDWebImage来进行头像加载的优化,当时只来得及了解其简单使用。现在有时间了,准备了解一下他的内部源码实现。 一、简介 SDWebImage是iOS中提供图片加载的第三方库,可以给UIKit框架中的控件比如 UIImage

【iOS】数据持久化
根据要存储的数据大小、存储数据以及存储类型,存储方式主要分为一下几种: Plist(属性列表),不能存放自定义对象 Preference(偏好设置/NSUserDefaults) NSCoding(NSKeyedArchiver/NSKeyedUnarchiver,归档/解档)

【iOS】TableView的优化
一、优化的本质 UITableView 的优化本质在于提高滚动性能和减少内存使用,以保证流畅的用户体验,从计算机层面来讲,其核心本质为降低 CPU和GPU 的工作来提升性能 CPU:对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制 G

【iOS】多线程与GCD
线程与进程 线程和进程的定义 线程 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行 进程要想执行任务,必须要有线程,进程至少要有一条线程 程序启动时会默认开启一条线程,这条线程被称为主线程或UI线程 进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,

【iOS】KVO
In order to understand key value observing, you must first understand key value coding. KVC是键值编码 ,在对象创建完成后,可以 动态的给对象属性赋值 ,而 KVO是键值观察 ,提供了一种监

【iOS】内存五大分区
栈区 定义 栈是一种数据结构,其对应的 进程或线程是唯一的 栈是一种 向低地址拓展 的数据结构 栈是一块 连续的内存 , 遵循先进后出原则 栈道地址空间在iOS中 以0X7 开头 栈区一般在运行时分配 存储 栈区是由 编译器自动分配并释放 的,主要用来存储 局部变量 函数的参数,

【iOS】alloc、init、new
1. alloc 进入到alloc的源码里面,我们发现alloc调用了 objc rootAlloc方法,而 objc rootAlloc调用了callAlloc方法。 具体内容本人暂时也一知半解,贴一张图 alloc为我们创建了1个对象并申请了一块不小于16字节的内存空间 具体

【iOS】KVC总结
什么是KVC KVC 的全称是Key Value Coding(键值编码),是由NSKeyValueCoding非正式协议启用的一种机制,对象采用这种机制来提供对其属性的间接访问,可以通过字符串来访问一个对象的成员变量或其关联的存取方法(getter or setter)。 通常

【iOS】内存管理初级
内存管理是程序在运行时分配内存、使用内存,并在程序完成时释放内存的过程。在Objective C中,也被看作是在众多数据和代码之间分配有限内存资源的所有权(Ownership)的一种方式。 内存管理关心的是清理或回收不用的内存,以便内存能够再次利用。 如果一个对象不再使用,就

【iOS】仿写 —— 计算器
在计算器的仿写中,本人首次实际使用MVC构架和Mansory自动布局。 安装Mansory 首先安装cocoapods,然后在终端找到项目文件夹,执行 pod init 随后修改文件,将内容改为: platform :ios, '12.0' target '计算器77' do p

【iOS】对象复制与属性关键字
目录 对象复制 一、copy与mutableCopy方法 二、NSCopying和NSmutableCopying协议 三、深复制与浅复制 按照类型说明: 非容器类对象的深拷贝与浅拷贝 不可变字符串 可变类型字符串 容器类对象的深浅拷贝 自定义类型的拷贝 容器类对象的深拷贝 归档

【iOS】AFNetworking
文件构成 AFURLSessionManager AFHTTPSessionManager 一次完整的GET请求过程 1. 初始化和配置 2. GET请求 3. 添加请求头的GET POST请求 举例:Spotify内容的获取 文件构成 AFNetworking的构成很简单,主要

【iOS】UIViewController
目录 编辑 视图加载: 视图可见性 viewWillAppear: viewDidAppear: viewWillDisappear: 总结 视图加载: 视图初始化会设计两个方法:loadView和ViewDidload 当新添加一个视图控制器时,通过xcode生成的代码模版只

【iOS】单例模式
1. 认识单例模式 首先让我们先看下关于 单例模式的定义 (来自于《设计模式》(Addison Wesley,1994)) 一个类 有且仅有 一个实例,并且自行实例化向整个系统提供。 如果说每一个人都是一个类,那么从他出生开始,他就是生活中的 唯一 实例,每当有人要拜访或者联系你

【iOS】设计模式的六大原则
开闭原则 开放封闭原则的意思是: 对拓展开放,对修改关闭。 程序中的模块、类、方法应该允许在 不修改原来代码 的前提下进行功能拓展。 假设一个支付系统,最开始只有微信支付,如果后面还要支持银联或者支付宝支付: 新增支付时候,只需写一个新类基层Payment而不需要修改原有代码。

【iOS】多界面传值
目录 属性传值(正向传值) 协议传值 通知传值 block传值 KVO传值 在iOS中的页面传值方式主要以下六种: 属性传值 单例传值 NSUserDefault传值 代理传值 block传值 属性传值(正向传值) 属性传值是通过定义属性并设置值来实现数据传递的方式,多用于前一个

【iOS】3Gshare项目总结与思考
目录 登陆注册及推出主页面 自动登录 登陆 自动收起键盘 注册 HomeVC SearchVC 上传图片: ArticleVC MyVC 我的信息 评论 && 活动通知 && 我的推荐 新关注的 私信: 设置 Tips: 登陆注册及推出主页面 这部分有两种写法:一种是在Scene

【iOS】Cell的复用与自定义cell
本着what how why的法则,我们首先要了解什么是cell。 一、Cell简介 在 Objective C(OC) 中, cell 通常指的是 UITableViewCell 或 UICollectionViewCell,也就是 表格或网格视图中的“单元格” 。 UITab

【iOS】网易云仿写
目录 首页编辑编辑 上方导航栏 主页内容 海报 推荐内容 猜你喜欢 “我的”页面 编辑 导航栏 主要内容 我的信息 工具栏: 歌单部分: 设置页面 与网易云相比,我只完成了首页以及“我的”页面的仿写。 首页 首页实现效果如上图。 上方导航栏 导航栏的左右按钮和搜索栏代码如上

【iOS】push 和 present
转场动画是下面几个情况: 导航控制器的push和pop动画。 普通控制器的present和Dismiss动画。 pesent和dismiss : dismiss多级 present还有两个方法可以让我们实现一个跨级返回的效果。presentingViewController 和p

【iOS】UI 初探
简介 第一次新建时,你可能会好奇。为什么有这么多文件,他们都有什么用? App 启动与生命周期管理相关 文件名 类型 作用 main.m m 程序入口,main() 函数定义在这里 AppDelegate.h/.m h/m App 启动/进入后台/退出等全局事件的管理者 Scen

【iOS】细说3Gshare 项目中的点赞双向传值
首先附上最终效果图 笔者写这篇文章主要是为了进行一个自我总结。今天在修改这方面bug中思路有些混乱,也借此机会重新总结复盘一下。 一、简介 首先,我们介绍一下代理传值: “代理”本质上是一个 协议(protocol)+ 指针属性 + 回调方法 的组合,它允许 一个控制器(如 A)

【iOS】天气预报仿写总结
目录 首页 搜索页面 城市详情页 首页 接收两个通知,一个是搜索页面的城市,另一个是详情页面的删除指令。 这个页面要执行两个操作: 点击加号添加城市,删除城市。 这个左滑删除功能需要两段代码 网络请求部分我在另一篇博客中有介绍,在这里不多赘述: 【iOS】网络请求与异步加载 io

【iOS】AutoLayout与Masonry:简化iOS布局
Auto Layout 与 Masonry 苹果提供的自动布局(Auto Layout)能够对视图进行灵活有效的布局。但是,使用原生的自动布局相关的语法创建约束的过程是非常冗长的,可读性也比较差。 Masonry 的目标其实就是 为了解决原生自动布局语法冗长的问题 。 其实说到本

【iOS】折叠cell
先给出实现效果: 折叠cell的实现 折叠cell的关键是通过按钮控制tableView的高度: 如此以来,点击按钮可以实现tableView高度的变化。 实现选中的单元格移到最前: 我们先获取Array中被选中的项目 然后在数株中移除,并插到头部,然后重新刷新tableView

【iOS】懒加载
懒加载 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其getter方法。说的通俗一点,就是在开发中,当程序中需要利用的资源时。在程序启动的时候不加载资源,只有在运行当需要一些资源时,再去加载这些资源。 使用懒加载的好处: (1)不必将创

【iOS】网络请求与异步加载
目录 网络请求 为什么你的图片要异步加载? 编辑 什么是“异步网络请求” GET 与 POST GET POST 网络请求 1,用NSString创建URL 2,创建NSURL对象:用URLSession对象进行网络请求 3,创建URLRequeset对其进行相关请求,分为GE

【iOS】MVC架构
目录 1 前言 2 MVC简单介绍 胖Model 和瘦Model 3 MVC的问题 1. 视图控制器过于臃肿 2. view和controller的边界很模糊 为了解决这些缺点,衍生出了许多改进的架构模式: "MVC",即Model(模型),View(视图),Controller

Size Matters:iOS 虚拟内存大小探索
Always Processing 中文译文:Size Matters:iOS 虚拟内存大小探索(原文:Size Matters: An Exploration of Virtual Memory on iOS)
