自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 28、iOS底层分析 - 内存管理

#import "LJLMemoryManagementVC.h"#import "DeviceHeader.h"#import "LJLAutoreleasepoolViewController.h"#import "LJLPerson.h"#import "LJLPerson+LJL.h"#import <objc/runtime.h>#import "LJLPro...

2020-03-30 18:21:07 1004

原创 31、iOS底层分析 - 界面优化

大纲:1、界面渲染流程2、UIView & CALayer3、卡顿检测4、案例实战5、异步渲染1、界面渲染流程UIKit :日常交互组件基本上都是来自于 UIKit,我们可以通过设置 UIKit 的 Layout ,来完成日程界面的绘画工作。但是并不具备在屏幕上成像的能力,在这个过程中,将对用户的操作事件进行响应,从而将当前的事件通过图层的图层树...

2020-03-27 19:07:20 1051

原创 (004)RunLoop 简单面试题

目录:1、RunLoop 是什么?/ RunLoop 的概念2、NSRunLoop 和 CFRunLoopRef?3、RunLoop 和线程的关系?4、RunLoop对外接口 / RunLoop的几个类?5、RunLoop内部逻辑?6、RunLoop应用场景?1、RunLoop 是什么?/ RunLoop 的概念RunLoop 是与线程相关的基础架构中的一部...

2020-03-24 22:56:05 307

原创 30、iOS底层分析 - RunLoop

#import "LJLRunLoopViewController.h"#import "LJLThread.h"@interface LJLRunLoopViewController ()@property(nonatomic, assign) BOOL isStopping;@end@implementation LJLRunLoopViewController- (v...

2020-03-24 16:14:56 437

原创 29、iOS底层分析 - @autoreleasepool 自动释放池

@autoreleasepool 自动释放池面试题:1、临时变量什么时候释放?2、自动释放池原理?3、自动释放池能否嵌套使用?研究分析例如main 中的 @autoreleasepool 思路是什么?clang、汇编 int main(int argc, const char * argv[]) { @autoreleasepool { ...

2020-03-22 14:24:33 551

原创 27、iOS底层分析 - 启动优化(二进制重排)

启动优化 - 二进制重拍iOS系统会对虚拟内存和物理内存进行分页,虚拟内存到物理内存的映射都是以页为最小单位的。启动:我们所说的启动时从点击icon 开始到 APP第一页显示。冷启动:程序完全退出(例杀掉进程后又开了许多其他的APP,这个时候程序所对应的物理内存已经被其他的程序占用,需要重新从虚拟内存加载到物理内存)或第一次安装启动(第一次安装 或 卸载后重装等)。...

2020-03-20 12:48:49 1441

原创 19、iOS底层分析 - GCD(二)应用分析

GCD应用分析1、dispatch_group_t 组GCD线程同步例如:同时进行多个网络请求(例:任务1、任务2),这几个任务互相不想干,但是等任务全部完成之后再执行接下来的任务,这种场景下,最常用的就是GCD 的group1、dispatch_group_async通过dispatch_group_async() 向组中添加任务1、任务2,然后通过dispatch_gr...

2020-03-15 16:39:20 139

原创 18、iOS底层分析 - GCD(一)基本概念与简单使用

GCD介绍 GCD 全程 Grand Central Dispatch,由C 语言实现,是苹果为多核的并行运行运算提出的解决方案,GCD 会自动利用更多的CPU 内核,自动管理线程的生命周期。GCD 实现的库是 libdispatch,可以在 Apple Open Source 下载 源码创建线程、调度任务、销毁线程都是由GCD自己进行管理,只需要告诉GCD 想要执行什么任...

2020-03-13 18:09:45 427

原创 17、iOS底层分析 - 多线程(一)相关概念

一、进程与线程1.1进程 进程是操作系统分配资源和调度的基本单位。在iOS上,一个APP运行起来的实例就是一个进程,每个进程在内存中都有自己独立的地址段(专用且受保护的内存空间),拥有独立运行所需的全部资源。1.2 线程 线程是进程的基本执行单元,进程中的所有任务都在线程中执行,因此,一个进程中至少要有一个线程。iOS 程序启动后会默认开启一个主线程,也就 UI 线程。...

2020-03-11 23:07:27 288

原创 23、iOS底层分析 - Block(二)

Block 的本质问题1、为什么可以使用 %@ 打印? 因为block 是个对象 结构体 也叫匿名函数2、Block 自动捕获外界变量 自动生成一个同名的属性来保存。copy一份外界变量进去3、Block为什么需要 block() 来触发调用 函数申明,具体的函数实现是在需要调用的地方进行调用。4、__block 的原理 生...

2020-03-11 01:14:13 194

原创 16、iOS底层分析 - 自定义KVO

自定义KVO分析了KVO的实现原理,为了加深印象模仿系统的方式自定义一个KVO。一、接口设计1.1 基本功能接口模仿系统的KVO接口,提供以下基本接口。注册观察者 移除观察者 回调// NSObject+LJLKVO.h#import <Foundation/Foundation.h>#import "LJLKVOInfo.h"@interf...

2020-03-08 23:00:39 261

原创 15、iOS底层分析 - KVO

KVC、KVO是iOS中经常会用到也是面试中经常会被问到的。今天就来探究一下KVO。什么是KVO?KVO:键值观察机制,它提供了观察某一属性变化的方法KVO的全称是 KeyValueObserving ,是苹果提供的一套事件通知机制。允许对象监听另一个对象属性的变化,并在改变时接收到事件。由于KVO的实现机制,所以对 属性 才会发生作用,一般继承自NSObject 的对象都默认支持KV...

2020-03-08 01:45:26 339

原创 22、iOS底层分析 - Block (一)

block是在iOS开发中用的比较多的,我对block的理解也不是很透彻,学习一下进行分析分析。Block1、block有几种?一般我们能用到的知道的block有三种:NSGlobalBlock (全局block ) NSStackBlock (栈block ) NSMallocBlock(堆block)但是其实block总共有6种,剩下的3种是系统级别的:通过查看源码...

2020-03-07 00:19:54 237

原创 (002)iOS属性浅析

今天简单的看了一下oc的属性和修饰符,当然还有一些简单的强弱引用等,就命名为属性吧。列举一下一些简单的属性,及其修饰符。static int countNum = 1;@protocol LJLDelegate <NSObject>-(void)showDelegate;@endtypedef void(^LJLBlock)(int);@interface L...

2020-03-06 19:00:04 201 1

原创 (001)NSTimer浅析

NSTimer在学习NSTimer的时候,遇到的一些问题整理。通过 A页面 push 到 B页面,在B页面开启NSTimer,然后pop回到A页面的时候,发现没有执行dealloc。这个时候定时器还在运行,造成内存泄露。代码如下:#import "LJLNSTimerViewController.h"#import "DeviceHeader.h"#import "...

2020-03-04 17:27:47 369

空空如也

空空如也

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

TA关注的人

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