Info.plist 中设置 View controller-based status bar appearance 控制 App 状态栏显隐接受全局配置(NO
原理iOS 把用户触摸事件打包成一个 UIEvent 对象,作为事件传递的消息载体,放入当前活跃的 APP 的消息队列中,然后通过 Hit-Test 机制 来找
App 的启动流程分为两个阶段:pre-main 和 main 脑图 pre-main 阶段 读取 App 的可执行文件(Mach-O 文件),从里面获得 dy
NSPointerArray特性介绍NSPointerArray 是 NSArray 的通用版本,和 NSArray/NSMutableArray 不同的是,N
NSNotification 接收通知时所在的线程取决于发送的线程还是注册的线程发送的线程。 如果是注册的线程,则 NSNotificationCenter 需
layer.cornerRadius 不会触发离屏渲染,该属性只是对边框和背景颜色起作用,适用于内部没有其他控件的 view。 CAShapeLayer+UIB
本文解决的问题 weak 的代码实现原理 当对象释放的时候,如何实现将 weak 指针置为 nil weak 指针的线程安全 阅读本文的前提1id __weak
提问 关联对象被存储在什么地方,是不是存放在被关联对象本身的内存中? 为什么 AssociationsHashMap 是使用 unordered_map,而 O
分类的源码123456789struct category_t { const char *name; // 原类名,而不是分类名 // 要扩展的类对
Runtime 原理123456789struct category_t { const char *name; // 原类名,而不是分类名 // 要
如果是协议中的属性,编译器不会自动合成实例变量,相当于只是声明了 setter/getter(注意是声明,没有实现) 第一步,声明协议 123@protocol
代码实现1234567891011121314151617181920212223242526void swizzleMethod(Class class, S
Weak-Strong Dance1234__typeof(&*self) __weak weakSelf = self;self.completion
autorelease 的伪代码实现1[obj autorelease]; 等同于以下代码 12345// NSObject.m:- (id)autorelea
结论 dealloc 是在最后一次 release 执行后调用 ARC 下,对象的实例变量的释放时机是:编译器在 NSObject 插入的 .cxx_desct
基本概念 KVC 是 Key-Value Coding 的缩写,让开发者可以通过 Key 直接访问或设置对象的属性/成员变量,而不需要调用存取方法 KVC 可以
基本概念 KVO 是 Key-Value Observing 的缩写,用于监听对象的某一属性改变 KVO 是 Objective-C 对观察者模式的实现 基础用
__NSCFConstantString12345678NSString *str1 = @"ab";NSLog(@"%p isa
UIWebView/WKWebView 拦截请求 Native 调用 JS 1[webView stringByEvaluatingJavaScriptFrom
@property 的本质1@property = ivar(实例变量) + getter/setter(存取方法); ARC 下,property 中有哪些属
联系 每一个 UIView 都有一个根 layer 两者都有树状层级结构,CALayer 有 subLayers, UIView 有 subViews 区别 触
特性对比 block delegate 安全性 容易产生循环引用 可读性 代码集中更连贯,代码更少 性能 性能开销比 delegate 多,因为 block 会
iOS 中有两种常用的图片加载方式: imageNamed 有缓存:这种方法会首先在系统缓存中根据指定的名字寻找图片,如果找到了就返回。如果没有在缓存中找到图片
MyApp.app 说明 存放资源文件和可执行文件。整个目录只可读,不可更改。为了防止篡改里面的内容,应用在安装的时候会将该目录进行签名。在非越狱的情况下,该目
block 用什么修饰符修饰对于这个问题,得区分 MRC 环境 和 ARC 环境;首先,通过上面小节可知,block 引用了普通外部变量,都是创建在栈区的;对于
GCD 脑图 GCD 队列和任务队列(Dispatch Queue) 串行队列:只开启一个线程,一个任务执行完毕后,再执行下一个任务 并发队列:可以开启多个线程
异步处理耗时任务后主线程更新 UI12345678// 获取全局并发队列dispatch_queue_t queue = dispatch_get_global
dispatch_set_target_queue基础用法dispatch_set_target_queue 的作用: 改变队列优先级 让多个串行队列之间也能串行地执行任务 改变队列优先级dispatch_qu
本文对应的源码地址——CFRunLoop.h本文对应的源码地址——CFRunLoop.c 数据结构CFRunLoop12345678struct __CFRun
RunLoop 脑图 RunLoop 流程 RunLoop 相关概念Event Loop事件循环模型,实现这种模型的关键点在于:如何管理事件/消息,如何让线程在
Runtime 脑图 概念Class、id、objc_object 定义源码 objc_class、objc_method 定义源码 category_t 定义
super 的本质《Objective-C Runtime初探:self super》 123456789101112@interface A : NSObje
iOS 的 initialize 和 load 区别load initialize 执行次数 1次 每个类会被系统只调用一次,但是由于继承的关系,子类未实现的情况下父类的方法会被多次调用 执行时机 所有运行时需要
进入到本地仓库的目录,并切换到你关心的分支 执行 git remote -v 查看 upstream 的设置,正常情况下应该是只有你自己的远程仓库地址 12or
如果 Git 拉取很慢,可能是因为 Git 没有设置代理,出现以下报错1fatal: unable to access 'https://github
直接 Push 行不行123git clone https://github.com/username/old-repository.gitcd old-rep
将文本中带有 viewWillAppear 的所有行打印出来1cat test.log | grep -n -i 'viewWillAppear&#x
Tree命令行下展示目录结构的神器——tree,使用 brew install tree 来安装 使用 ll 作为 ls -l 的别名123456cd ~tou
移除 Main.storyboard 文件 移除 LaunchScreen.storyboard 在 TARGETS 中,将 Main InInterface
Tag列出本地 Taggit tag 本地添加 Taggit tag v1.0.0 删除本地 Taggit tag -d v1.0.0 把本地 Tag 推送到远
什么是 RESTREST:REpresentational State Transfer,直译就是 “表现层状态转移” 通俗地讲就是,URL 定位资源,用 HT
在 32 位机器上,int 的范围是 [-2^31, 2^31-1],为什么正数和负数的范围不对称? 一、机器数和真值在学习原码,反码和补码之前,需要先了解机器
一、ASCII 码我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称
不捕获任何变量12345int main(){ void (^blk)(void) = ^{printf("Block\n&quo
什么是 Block Block 是带有自动变量(局部变量)的匿名函数 ——《Objective-C 高级编程》 Block 是 Objective-C 对于闭包
otoolotool 命令全称 object file displaying tool,是针对目标文件的展示工具,可以帮助我们发现应用中使用了哪些系统库,以及调
库什么是库 库的本质是一段编译好的二进制代码,加上头文件就可以供别人使用。 库从广义上可分为开源库和闭源库, 而闭源库才分为静态库和动态库 开源库:对外公开源代
概念符号表符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示: <起始地址> <结束地址> <函数> [&l
OTHER_CFLAGS 和 GCC_PREPROCESSOR_DEFINITIONS 区别1s.pod_target_xcconfig = { &#
配置同步Key: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 借助插件:vscode-syncing 备份方法:cmd+sh
VideoNative 项目与 Cocoapods三个仓库 VideoNative/VideoNative 日常开发用的仓库(开发仓库) VideoNative
主要是 XcodeProj 这个工具的应用 Xcode 中 Group 和 FileRef 的区别GroupGroup 这个概念和我们平时经常说的 folder
Instruments 的 Leak 使用 Make Generation 标记,如图所示。 Generation A 的内存占用表示的是,是从启动到标记 A
我用过的python库 pprint:美观打印数据结构 requests:可以方便地发送http请求,以及方便地处理响应结果,完胜自带的 urllib Beau
python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。 例子读取文件全部内容12with open('/path/t
示例代码123456789101112131415161718192021import urllib.requestimport urllib.parseimp
其他 TypeScript 规定,变量只有赋值后才能使用,否则就会报错 12let x:number;console.log(x) // 报错 上面示例中,变量
背景RN 项目中可以使用 yarn tsc 来进行 TS 文件的检查。什么是 tsc 呢? tsc 是 TypeScript 编译器,用于将 TypeScrip
npx 主要有两个作用 作用 1:调用项目安装的模块如果要在命令行中调用 node_modules 中的模块,使用 npx 之前,你需要 12# 项目的根目录下
假设现在有一个 helloWorld 工程,已经在其 package.json 的 dependencies 中声明了 packageA,有两个插件 plugi
执行 yarn 时可能遇到 Node 版本不匹配 1The engine "node" is incompatible with this
常用方案 媒体查询 https://github.com/Norcy/wiki/commit/923735e175cd300292eedb93557c18a49
如果是 node_modules 下的三方模块使用 patch-package 工具即可 Step1:安装注意只在 dev 下生效即可 1yarn add pa
节流 throttle定义n 秒内频繁调用多次时,只执行第一次调用(也可以选择定时结束时执行) 举例如下,疯狂点击按钮,1 秒内只会执行一次,且这一次为 1 秒
GitHub Page 从 TravisCI 迁移到 GitHub Action背景Travis CI 开始收费,导致我的 GitHub Page 的网站部署失败,转向免费又好用的 GitHub Action 我之前使用的 Hexo 来创建
一些坑 如果使用了分割线,则生成 html 失败(已经第三次踩坑),如果要用分割线,得使用 ____ 而不是 --- Travis CI 自动构建NexT 主题
Mac 系统版本为 Sonoma 14.4.1,不小心卸载了 ruby 2.7,重装过程无比坎坷,是为记之 Google 了 2 个小时无果,关键还得感谢 Ki
转自公司内文章 背景使用 TouchableOpacity 组件,在快速横向切换和上下滑动过程中,存在较高概率的误点击的情况 RN 的点击原理如下 方案根据以上
这样写,键盘的修改不会导致 value 改变,你还需要监听 onChangeText 来 setValue 12345const [value, setValu
React.memoReact 中,当父组件的一个状态改变后,无论和子组件是否有关,子组件都会受到影响进行重新渲染,这也是 React 中默认的一个行为 使用
背景引入项目中的模块时,默认使用了相对路径,由于 i18n 需要批量替换 import,而每个文件相对 i18n 模块的位置不一样,那此时就无法完成批量替换 解
转自公司内大佬的文章,深入浅出的写法值得学习 TLDR源码实现 12345/** 可在同一函数重复多次使用,互不干扰 */export function use
背景当开发一个新的 RN 组件时,发布之前可能需要经过业务场景的测试。如何测试才能更高效呢? 这里涉及两个路径,用以下字符串代替 开发中的组件的路径:/path
下载 KM 图书知识点:网络 Get 请求;文件读写;Markdown 转 PDF 深圳新冠疫苗放号监控知识点:网络 Post/Get 请求;定时任务;微信推送
切换 Mac Python 版本12python3 --version # pip 21.0.1 from /usr/local/lib/python3.8/s
https://www.jianshu.com/p/409bfa57608e 详细可见 https://github.com/Norcy/photo_renam
方法一、arvg参数获取12345import sys print(sys.argv[0]) ## 脚本名 print(sys.argv[1]) ## 第一个参
python1python3 -m http.server http-server1234yarn global add http-server# 也可以使用
crontab 用法常用命令如下 1234crobtab crontab_info # 录入定时任务,只执行这个不会生效crontab -e # 编辑定时任务,
问题在 H5 页面使用 JS 代码下载 apk 文件 1window.open('http://xx.apk'); 表现在 Chrome 上
现象 A.js 部署在 http://192.168.2.103:5173/,服务器部署在 http://192.168.2.103:8888/guess.ph
当左值为 null 或 undefined 时(并非所有 false 值,如 0 或 ‘’),返回右值 但是当左值为 0 时,依然返回左值,这是和 || 的唯一
?? 坑要注意运算符 ?? 的优先级 123456let a = 2, b = 3;a-b; // -1a??0; // 2b??0; // 3a??0-b??
剩余参数使用 & 来声明 props 的类型 12345678const ListItem = ({ item, ...props}
wxml 的胡子拼接1<view wx:for="{{5}}">{{
背景x 是一个字符串,要求 x 为 null/undefined/‘’ 时不要渲染元素 很容易会写出以下代码 1{x?.length > 0 &
背景Android 的 RN 工程,如果要对某个三方库进行 Native 代码的修改,该三方库不是自己维护的,因此需要 fork 一份到自己的 Github 仓
12345const FOO = '123';const BAR = { FOO: 333}; BAR 的结果竟然是 &
Object 经过 JSON.stringify 转换之后,会丢失值为 undefined 的键值对 12let a = {foo: 1, bar:
1234567const oldRender = Text.render;Text.render = (...args) => { const
USB 调试 连接 USB 后运行 adb reverse tcp:8081 tcp:8081 执行 yarn run android 安装 APK conso
Native Debug 在点击函数里面 console.log(a.b) 如果是 JS Debug,则 Fatal 如果是 JS Release,则打印 un
useRefuseRef 有两个作用,详细可参考 https://zh-hans.reactjs.org/docs/hooks-reference.html#u
RN 中,fetch 的 body 参数,只要带上 query,在安卓的 release 版本上,调用 .json() 的时候就会报错。 Android 的 d
已实践的组件推荐 cell 拖拽 react-native-draggable-flatlist 星星评分组件 react-native-ratings rea
Bridge 与线程1. Bridge 中所有暴露的方法,分为同步方法和异步方法1234// 这是同步方法的声明RCT_EXPORT_BLOCKING_SYNC
di18n 失效字符串中只要出现 “.” 就会失效,比如 1234// 翻译失败i18n.t("该文件的后缀名不对,应该为 .db")//
异常上报新版本的 Sentry 配置目前新版本是 12"@sentry/cli": "^1.59.0","@s
背景 双端均能使用 xxx:// 直接打开 App 双端均能使用 https://yyy.com/zzz 直接打开 App Android使用 scheme 打
本文记录一些 LeanCloud 方面的安全实践 MasterKeyMasterKey 是级别最高的 Key,会跳过所有 API 的权限检查,绝对不能泄漏 不能
数据库存在慢查询怎么办以 Record 为例,如果经常以 user 作为查询条件,那么就可以建立 user 索引 索引的本质是多维护一颗平衡树,这样查找的时候可
beforeSave 的时候获取不到对象的属性值1234567AV.Cloud.beforeSave('GiftUserMap', asyn
RN Android 包体优化最佳实践ABI 架构优化如果你的 App 只有真实设备,不使用模拟器,则可以移除 x86 架构,最佳实践如下 android/ap
流程 安装 fastlane,不详述 初始化 fastlane 123456cd iosfastlane init# 选择 3. Automate App St
每次提审 AppStore 都要提示缺少合规证明 其实只要在 Info.plist 添加 App Uses Non-Exempt Encryption 为 NO
模拟器编译libWeChatSDK.a 链接失败报错:libwechatsdk.a’ for architecture arm64
苹果删除帐号原理调用 Revoke 接口需要 client_id、client_secret 和 token client_id:App 的 BundleId
which 加上 -a 可以查看所有同名程序的位置123456$ which ruby/Users/Norcy/.rvm/rubies/ruby-2.7.1/b
apache2 开机自动启动123456# 先确保 apache2 的命令是可用的,关闭后网页无法访问sudo systemctl stop apache2#
前言一个前端开发如何摆脱 PHP 去构建后台服务 目标 使用 JS 作为语言 支持 GET/Post 支持指定路由 支持 HTTPS 支持服务持续运行 环境要求
三次握手的过程 刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。 第一次握手:客户端发送 SYN=1,seq=x(SYN=1 的报文段不
对比 UDP TCP 是否连接 无连接 面向连接(三次握手) 是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,有序列号,确认号,超时重传等,使用流量控
四次挥手的过程 TCP 三次握手,一定是客户端先发起连接;而 TCP 四次挥手,发起中断连接的既可以是客户端,也可以是服务器。 本文以客户端先发起请求为例,刚开
背景想抓订阅号助手的请求,看能否实现公众号推文自动发布,结果用 Stream 抓包软件抓不到任何的请求,但是请求却正常发送了 疑问如何既能正常发出请求,又能不被
OSI 七层模型、TCP/IP 五层模型、与 TCP/IP 四层模型 数据传递时,每层都会在上一层的报文添加自己的头部 应用层HTTP、FTP、SMTP、DNS
背景今天想从【今日热榜】这个 App 中获取榜单的 Get 请求,从而可以“借”它们的数据做个榜单类的小程序。用 Charles 抓手机的包之后,发现可以抓取到
多态父类指针指向一个子类对象,调用父类声明的方法后,实际上调用的是子类的实 1234567891011121314151617class A{publ
重载在 C++ 中,重载指的是函数名相同,但是参数类型或参数个数不同的函数;而在 OC 中是不支持重载的 C++ 区别函数是通过函数签名,函数签名包括函数名、参
背景我们项目里看到一个头文件,是专门定义各种常量的,有一天发现这里的常量定义既使用了 static,又使用了 const,这个文件没有类,全部都是字符串的定义
变量的定义与声明1234extern int a; // 声明一个全局变量aint a; // 定义一个全局变量aextern int a = 0; // 定义
虚函数相关 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义基类的函数为虚函数是为了允许用基类的指针来调用子类的这个函数(多态) 定义一个函数为纯虚函数
C++ 可以给参数设置默认值,当参数缺省的时候,使用默认值如果没有设置默认值,则调用的时候不能省略参数 12345678910111213void f(int
C++ 中 如果是子类指针强制转换父类指针,则称为上行转换(upcasting) 如果是父类指针强制转换子类指针,则称为下行转换(downcasting) 例子
map 是基于红黑树实现,O(lgn) 的时间复杂度完成查找、插入和删除,内部是有序的 unordered_map 是基于 hash_table 实现 map
今天遇到一个 crash,追溯到最后竟然是因为在两个 .cpp 文件中声明了2个相同名称的全局变量,改用 staitc 修饰它们为静态全局变量就解决问题 123
假如客户端要登录,将用户名和密码传到服务器 如果使用 HTTP,会有什么问题HTTP 是明文传输,有以下问题 窃听风险:第三方可以获知通信内容(需要加密) 篡改
选择排序每次挑最小的放左边 123456789101112131415void selectionSort(int s[], int n){ for
图解堆排序堆排序是什么 堆排序的步骤 将无序数组就地交换,堆化为最大堆 将堆顶元素与末尾元素交换,将最大元素沉到数组末端; 重复步骤 1 和 2,直到整个数组有
回溯算法的框架解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选择列表:也就是你当前可以做的
123456789101112131415161718192021222324252627282930313233343536void quickSort(in
最长回文子串https://leetcode-cn.com/problems/longest-palindromic-substring/ https://le
二叉树的最近公共祖先https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tr
删除单向链表中的指定节点https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 只能访问当
模块化模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分割、作用域隔离、模块之间的依赖管理以及发