自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Coder

iOS 开发

  • 博客(336)
  • 资源 (3)
  • 收藏
  • 关注

原创 静态库查看信息

静态库查看信息。

2023-03-13 14:21:52 233

原创 RTMP FLV H.264 NALU GOP

RTMPGOP (通常是 2倍的帧率, 2s左右)GOP说白了就是两个I帧之间的间隔.比较说GOP为120,如果是720p60的话,那就是2s一次I帧.宏块GOP:一段时间内图像变化不大的图像集我们就可以称之为一个序列,这里的图像又在H264里面称为帧,所以就是一组视频帧,其中第一个我们称为是IDR帧。帧:一副图像编码后的视频数据也叫做一帧,其中有I帧、B帧、P帧片:一帧图像又可以划分为很多片,由一个片或者多个片组成(这里视频帧被划分为一个片或者多个片,片数据主要就是通过NLAU进行传

2022-02-21 01:04:45 2023 1

原创 运行三方的app

运行调试三方的app

2022-02-19 00:41:09 1596

原创 多线程与GCD

线程进程和线程线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。进程要想执行任务,必须得有线程,进程至少要有一条线程程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程。关系地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的 资源是独立的。多线程...

2022-02-17 14:20:56 61

原创 消息机制

消息发送objc_msgSend流程未命名 (2).jpg动态方法解析流程未命名 (1).jpg- (void)test1{}+ (void)test2{}void c_test(id self, SEL _cmd){}// - 对象方法的动态解析+ (BOOL)resolveClassMethod:(SEL)sel{ if (sel == @sele...

2022-02-17 11:07:29 32

原创 runtime

内存对齐1、数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储)。2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数...

2022-02-15 15:25:24 43

原创 事件的传递和响应

响应链image.png- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window.rootViewController = [[ViewController alloc] init]; ...

2022-02-13 19:19:38 42

原创 自动释放池

objc_autorelease内部主要函数// - __AtAutoreleasePool 结构体struct __AtAutoreleasePool { __AtAutoreleasePool() {atautoreleasepoolobj = objc_autoreleasePoolPush();} ~__AtAutoreleasePool() {objc_autorelease...

2022-02-13 18:08:01 36

原创 RunLoop

RunLoop_0.png一个 RunLoop 包含若干个 Mode,每个 Mode 又包含若干个 Source/Timer/Observer。每次调用 RunLoop 的主函数时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode。如果需要切换 Mode,只能退出 Loop,再重新指定一个 Mode 进入。这样做主要是为了分隔开不同组的 Source/Timer/...

2022-02-09 17:17:12 34

原创 iOS 内存管理

内存布局-五大区iShot2022-02-08 12.38.23.png栈区 0x7创建临时变量时由编译器自动分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。堆区 0x6那些由 new alloc 创建的对...

2022-02-08 15:28:59 44

原创 iOS libffi 一些理解

C 语言主动调用函数// - 函数声明double addFunc(int a, double b){ return a + b;}// - 测试函数void libffi_add(){ // - 构造函数模板 包括参数和返回值 ffi_cif cif; ffi_type *argTyeps[2] = { &ffi_type_sint, &ffi_type_double }; ffi_type *rettype = &ffi

2021-12-16 12:25:39 2562

原创 字符串常见的功能总结

字符串格式化显示// - 格式化显示 123456, 改为12.3万; 100000改为1万. NSInteger edanCount = self.edan.integerValue; if (edanCount > 1000000) {/** 鹅蛋数超过 1000000 显示 100万 或者 32.1万*/ if ( edanCount % 10000 == 0) {/** 可以被 10000 整除 显示 100万*/ return [NSStr

2021-12-08 17:15:24 174

原创 CoreText

1. 基础知识2. 示例self.view.backgroundColor = [UIColor darkGrayColor]; UIFont *font15 = [UIFont systemFontOfSize:15]; UIFont *font30 = [UIFont systemFontOfSize:30]; NSDictionary *dic1 = @{NSFontAttributeName:font15, NSFo

2021-11-23 16:47:15 1787

原创 iOS 网络

获取域名对应的IP+ (void)IPAddressByHostName:(NSString *)hostName{ const char* szname = [hostName UTF8String]; struct hostent* phot = gethostbyname(szname); for(char **pptr = phot->h_addr_list; *pptr != NULL; pptr++){ struct in_addr ip_add

2021-11-19 14:37:27 85

原创 08.HTTPS

加密解密私钥和公钥的加密解密混合密码系统证书

2021-08-05 01:01:50 157

原创 IDA 使用记录

IDA 使用下载 IDA解决 中文输入法下崩亏的 bug (https://github.com/fjh658/IDA7.0_SP 下载工程中编译好的libqcocoa1.dylib 将其copy到 /Applications/IDA Pro 7.0/ida.app/Contents/PlugIns/platforms/路径下即可)将二进制文件拖到 IDA 中对于 unity 写的游...

2021-07-26 01:05:33 718

原创 07.HTTP

HTTP超文本传输协议POST请求 在charles中的表现响应 在charles中的表现wiresharkpost请求 request header中的数据post请求 request body中的数据response header中的数据response body中的数据GET请求 在charles中的表现响应 在charles中的表现 wiresharkget请求 request header中的数据respo

2021-07-26 00:35:14 99

原创 06.域名,DNS,DHCP

域名通常完整域名格式 xx级别域名.四级域名.三级域名.二级域名.顶级域名, eg. mai.whu.edu.cn分类顶级域名通用顶级域名.com(公司); .net(网络机构); .org(组织机构); .edu(教育); .gov(政府部门); .int(国际组织);国家及地区顶级域名.cn(中国); .jp(日本); .uk(美国)新通用顶级域名.vip; .xyz; .top; .club; .shop二级域名在通用顶级域名下, 一般指域名注册人

2021-07-25 01:02:02 407

原创 @synthesize 的使用和原理

代码Person2// - 声明@protocol propertyProtocol <NSObject>@property (nonatomic, strong) NSObject *property4;@end@interface Person2 : NSObject <propertyProtocol>@property (nonatomic, strong) NSObject *property1;@property (nonatomic, strong

2021-07-13 16:06:16 965

原创 iOS画中画

原理在播放视频的时候,先使用IJKPlayer播放流视频, 同时启动AVQueuePlayer播放一个loading的视频(AVQueuePlayer 播放的视频需要循环播放, 播放loading, 是为了在程序进入后台时候, 有一个loading的假象)在程序进入后台时候, 画中画会自动启动, 同时关掉IJKPlayer播放, 让AVQueuePlayer独占音频播放, 然后预加载m3u8的视频流, 当m3u8可以播放时候, 直接让 AVQueuePlayer 播放 m3u8的视频流.程序进入前台

2021-07-07 12:04:41 1583 1

原创 05.网络模型(二)

运输层

2021-06-23 01:12:26 131

原创 05.网络模型(一)

物理层

2021-06-20 20:11:00 262 1

原创 04.子网,超网,静态路由

子网划分划分原因如果有200台设备, 组建一个子网, 创建一个C类网段, 可以 192.168.1.0/24 这样一共有254个ip可以使用, 54个空间的ip地址, 不算是浪费资源,如果有500台设备, 组建一个子网, 创建一个B类网段, 可以 191.100.0.0/16, 这样一共有65534个ip可以使用, 这种情况就极大的浪费了资源.划分规律如果希望子网的ip数量是原来的1/2, 可以将子网掩码后移1位. 网掩码为1的位置对应的ip地址的位置, 表示的是网络标识, 子

2021-06-20 01:31:19 425

原创 03.MAC地址,IP地址,子网掩码

MAC 地址每个网卡都有一个6字节(48bit)的mac地址前3个字节表示厂商, 由IEEE的注册管理机构分配给厂商, 后三个字节表示网络接口标识, 由厂商自行分配给每个设备.不同平台的表示形式不同windows40-55-82-0A-8C-6DLinux, Android, Mac, iOS40:55:82:0A:8C:6DPacket Tracer4055.820A.8C6DMAC 地址的48位都是1(FF FF FF FF FF FF FF FF)时候, 表示是广播. 计算

2021-06-17 00:51:15 508

原创 02.集线器,网桥,交换机

局域网内多台计算机间通信的方法计算机之间通信, 首先需要通信双方的mac地址和ip地址计算机通过arp协议, 发送局域网内的广播, 来获取指定ip的设备的mac地址1. arp 协议是广播协议, 源ip和目的ip接受和发送方的ip地址, 源端mac地址是发送方的mac地址, 目的mac地址是 FFF FFF FFF.2. arp协议的回复 源ip和目的ip接受和发送方的ip地址, 源端mac地址和 目的mac地址是接受和发送方的mac地址.ping命令, 本质是ICMP协议的数据包

2021-06-16 01:29:29 233

原创 01.基本概念

1. 基本概念C/C++ 跨平台原理使用平台相关的编译器, 将C/C++编译成对应平台的可执行文件, 然后在对应的平台上运行Java的跨平台原理Java将代码编译成与平台无关的字节码文件(.class文件), 然后再由对应平台的JVM(Java虚拟机) 加载编译完的字节码文件(.class文件), 解析字节码文件并将它翻译为对应平台的机器指令. (基于上述的跨平台原理, java的源文件可以做到, 一次编译, 到处运行).HTTP 请求通信的原理再服务端运行一个程序, 一直监听80端口的的数据

2021-06-15 00:46:35 1423 3

原创 UIView 添加导航的功能

协议文件QIENavigationViewAnimation.h//// QIENavigationViewAnimation.h// Demo_03//// Created by 李超群 on 2021/6/8.// Copyright © 2021 李超群. All rights reserved.//#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN#pragma mark - view显示和

2021-06-08 17:01:23 118

原创 Charles rewrite 功能

1./* 使用 rewriteRule 修改socket的IP和端口号 正则: "nodes":.*?"] 勾选: Regex 替换: "nodes": ["172.17.3.131:6415"] */

2021-06-04 18:04:30 351

原创 不改变源码的方案 隐藏MJRefresh的UIActivityIndicatorView

前期尝试遇到的问题 1. @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 被weak修饰, removeFromSuperview 会重新初始化2. startAnimating 的时候, 即使view已经hidden, 那这个view也是显示的.// - 先用强引用指向 loadingView, 然后 [loadingView removeFromSuperview]; 时候loadingVie

2021-04-25 10:53:03 160

原创 iOS 使用匿名对象

例如比较器@protocol NSCompare <NSObject>@end@interface NSCompare : NSObject@property (nonatomic, copy) void(^compareTo)(int a1, int a2, NSCompare *cmpObj);@property(nonatomic, copy) NSString *des @end@implementation NSCompare @end

2021-04-16 22:33:00 159

原创 m1 pod install pod lint 失败解决方案

sudo arch -x86_64 gem install ffiarch -x86_64 pod installarch -x86_64 pod lint

2021-04-06 19:01:14 490

原创 iOS 探索copy和strong 深拷贝和浅拷贝

验证代码 // - 使用strong和copy 修饰属性 @interface Person : NSObject @property (nonatomic, copy) NSString *cStr; @property (nonatomic, strong) NSString *sStr; @end NSString *str = @"abcdefghigklmn"; NSMutableString *mStr = [NSMutableString stri

2021-04-02 14:48:16 129

原创 view的子视图的递归

// - 方法一- (void)getSubView:(UIView *)view array:(NSMutableArray *)array{ for (UIView *sub in view.subviews){ [array addObject:sub]; [self getSubView:sub array:array]; }}// - 方法二- (NSMutableArray *)getSubView:(UIView *)view{

2021-03-23 12:28:22 150

原创 Cocoapods的相关知识点

pod 流程pod 缓存 ~/Library/Caches/CocoaPods搜索并安装Cocoapods上的某一个库,大致执行流程为:1、从search_index.json中找到该库对应版本的podspec文件并将其下载到Specs/Release文件夹中2、根据该库的podspec文件中的source中的git地址,将对应版本的库下载到Pods/Release文件夹中将本地自己开发的库推送到Cocoapods仓库时,大致执行流程为:1、执行 pod spec lint XXX.pod

2021-03-19 11:41:15 191

原创 图像算法

图像局部缩放算法// - 公式 :// - 代码实现precision mediump float;varying vec2 aCoord; // - 纹理坐标uniform sampler2D vTexture; // - 纹理采样器uniform float a; // - 缩放系数uniform vec2 left_eye_center; // - 左眼中心uniform vec2 right_eye_center; // - 右眼中心// - 图像局部缩放算法实现//

2021-01-21 17:55:15 1476

原创 AVFoundation

CMFormatDescriptionRef用来访问媒体的格式信息typedef CMFormatDescriptionRef CMVideoFormatDescriptionRef;typedef CMFormatDescriptionRef CMAudioFormatDescriptionRef;1. 获取 CMFormatDescriptionRef CMFormatDescriptionRef sampleBufFormat = CMSampleBufferGetFormatDes

2020-12-10 18:23:39 793

原创 AWLive 结构体的使用

结构体声明// - 声明三种结构体struct aw_flv_audio_tag;struct aw_flv_video_tag;struct aw_flv_script_tag;// - 定义这三种结构体的变量typedef struct aw_flv_common_tag{ union{ struct aw_flv_audio_tag *audio_tag; struct aw_flv_video_tag *video_tag;

2020-11-30 17:50:57 97

原创 Paw 高级使用指南

使用paw上传图片使用paw表单提交使用paw json提交使用paw 保存Cookie使用paw ip直连

2020-11-26 16:36:36 1853

原创 字节序数据读写

字节序判断iOS中的字节序转换和字节序判断方法详见 NSByteOrder.h 文件中, 具体实现见 CFByteOrder.h// - 0x01020304在内存中的表现, 小字节序 : 04 03 02 01, 大字节序 01 02 03 04 iOS系统是小字节序;static uint8_t is_little_endian(){ union { int a; uint8_t b; }c; // - 此时共用体 c在iOS系统内存中的

2020-11-25 16:00:50 287

原创 static 和 extern 关键字详解

背景介绍全局变量外部变量:定义的变量能被本文件和其他文件访问(默认情况下,所有的全局变量都是外部变量,不同文件中的同名外部变量,都代表着同一个变量)内部变量:定义的变量只能被本文件访问,不能被其他文件访问(不同文件中的同名内部变量,互不影响)关键字介绍static对变量的作用: 定义一个内部变量 ,使不同文件中的同名内部变量,互不影响;对函数的作用: 定义和声明一个内部函数extern对变量的作用: 声明一个外部变量对函数的作用: 定义和声明一个外部函数(可以省略)

2020-11-25 11:51:12 158

libaw, C语言教科书级源码, 值得一看

libaw, C语言教科书级源码, 值得一看

2020-11-25

一种直播间的架构

一种直播间的架构

2019-08-28

一种tableView的架构

一种tableView的架构模式

2019-08-28

空空如也

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

TA关注的人

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