自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 iOS13以后 获取KeyWindow

【代码】iOS13以后 获取keyWindow。

2023-11-07 17:15:57 301

原创 iOS Simulator unable to load the application - Rosetta error (iOS Rosetta 模拟器加载错误)

模拟器报错 Could not attach to pid : “31142”解决办法: 修改Derived Data路径 将默认路径 Move your DerivedData to a path that is short enough/Users/sweetersmile/Library/Developer/Xcode/DerivedData比如放到桌面/Users/sweetersmile/Desktop/DerivedData

2023-11-03 11:14:16 133

原创 Swift 用 forEach 优雅的改变数组元素

【代码】Swift 用 forEach 优雅的改变数组的元素。

2023-04-09 00:04:35 409

原创 Swift Codable 解析不确定类型

【代码】SwiftCodable解析不确定类型。

2023-02-08 16:13:19 474

原创 拦截UIViewController的系统侧滑POP手势

【代码】拦截UIViewController的系统侧滑POP手势。

2022-12-02 16:08:28 349

原创 Swift 禁止某个控制器的侧滑pop手势

【代码】Swift 禁止某个控制器的侧滑pop手势。

2022-11-17 11:50:02 1039

原创 Swift 在父控件上给子控件拓展点击区域

【代码】Swift 在父控件上给子控件拓展点击区域。

2022-11-04 17:43:05 421

原创 Swift 限制UITextField的输入长度

【代码】Swift 限制UITextField的输入长度。

2022-10-19 16:37:32 1385

原创 iOS13 CryptoKit MD5 SHA1 SHA256 多种加密

iOS13 CryptoKit MD5 SHA1 SHA256 多种加密。

2022-10-11 01:36:24 465

转载 iOS数组去重常用方式

1.开辟新的内存空间判断是否存在,若不存在则添加到数组中,得到最终结果的顺序不发生变化 NSArray *originalArr = @[@1, @2, @3, @1, @3]; NSMutableArray *resultArrM = [NSMutableArray array]; for (NSString *item in originalArr) { if (![resultArrM containsObject:item]) {

2021-08-07 21:50:51 2602

原创 git 比较两个分支内容差异

使用git diff 比较两个分支git diff 分支1 分支2加--stat参数,显示文件列表, 默认是文件内容diff,如上git diff 分支1 分支2 --stat

2021-06-28 12:00:27 992

原创 Mac OS命令行工具清屏快捷键

command+K

2021-06-26 18:13:12 794

转载 Cocoa 文本架构指南

字体处理本章解释了 Cocoa 文本系统如何处理字体。它解释了如何在应用程序中使用字体面板、如何直接使用字体对象以及如何使用字体管理器。字体面板字体面板,也称为字体窗口,是一个用户界面对象,显示可用字体系列和样式的列表,让用户预览它们并更改用于显示文本的字体。文本对象,例如NSTextView,与NSFontPanel和NSFontManager对象来实现 AppKit 的字体转换系统。默认情况下,文本对象使用其选择中的第一个字体或其键入属性保持“字体”面板更新。它还会更改显示文本的字体,以

2021-06-24 14:43:18 300

转载 JS中find(), findIndex(), filter(), forEach(), some(), every(), map()方法

1. find()与findIndex() find()方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。 [1, 2, 5, -1, 9].find((n) => n < 0) //找出数组中第一个小于 0 的成员 // -1 find()方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。 ...

2021-06-23 10:03:44 987

原创 React Native 可以通过改 opacity 属性来改让控件置灰

<Image style={{opacity:1}} source={imageName}></Image><Image style={{opacity:0.4}} source={imageName}></Image>

2021-06-16 13:31:02 1210

原创 npm node升级到最新版本

首先查看其版本node -vnpm -v然后更新至最新版本更新npm :npm install -g npm更新node版本:先清除npm缓存:npm cache clean -f然后安装n模块:npm install -g n升级node.js到最新稳定版:n stable如果是mac 升级出现错误 在命令前面家sudo...

2021-06-16 13:30:30 9821

转载 VSCode Mac 快捷键

全局Command + Shift + P / F1 显示命令面板Command + P 快速打开Command + Shift + N 打开新窗口Command + W 关闭窗口基本Command + X 剪切(未选中文本的情况下,剪切光标所在行)Command + C 复制(未选中文本的情况下,复制光标所在行)Option + Up 向上移动行Option + Down 向下移动行Option + Shift + Up 向上复制行Option + Shift + Down 向

2021-05-27 11:36:44 524

转载 在 Mac 上将 zsh 用作默认 Shell

在 Mac 上将 zsh 用作默认 Shell从 macOS Catalina 版开始,您的 Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell。您还可以在较低版本的 macOS 中将 zsh 设置为默认 Shell。默认情况下,您的 Mac 使用 zsh 或 bash 作为登录 Shell 和交互式 Shell 的命令行解释器:从 macOS Catalina 版开始,zsh (Z shell) 是所有新建用户帐户的默认 Shell。 bash 是 macOS Mojav

2021-05-05 12:54:05 229

原创 MAC 设置多个JAVA版本切换

一:jdk下载、安装各版本下载地址mac系统中Java默认目录:/Library/Java/JavaVirtualMachines/本地需要两个不同版本的java:jdk1.8和jdk14二、JDK环境配置配置JAVA_HOME:vi ~/.bash_profile//alias是自定义命令别名#javaexport JAVA_8_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents..

2021-05-05 12:48:59 464

原创 最新 Github前端学习仓库

1.javascript-algorithms(基于javascript的算法和数据结构)https://github.com/trekhleb/javascript-algorithms2.nodebestpractices(Node.js最佳实践)https://github.com/goldbergyoni/nodebestpractices3.You-Dont-Know-JS(你不知道的js这本书的开源版本)https://github.com/getify/You-Dont-K

2021-04-26 21:36:03 86

原创 React Native 常用断点调试

command+D 选择Debug打开chrome浏览器 F12找到对应的文件 打断点调试代码

2021-04-23 18:53:08 528

原创 VSCode 插件推荐

推荐安装的插件插件 作用 Chinese (Simplified) Language Pack for VS Code 中文(简体)语言包 Open in Browser 右击选择浏览器打开html文件 JS-CSS-HTML Formatter 每次保存,都会自动格式化js css 和html 代码 Auto Rename Tag 自动重命名配对的HTML / XML标签 CSS Peek 追踪至样式 ...

2021-04-19 12:03:28 59

原创 ssh下载gitlab上的代码

1.终端输入 ssh-keygen -t rsa -C '[email protected]' 生成秘钥 (gitlab账号)2.终端输入 cat ~/.ssh/id_rsa.pub 查看有没有生成公钥3.git clone [email protected]:xxx/xxx-app.git

2021-04-16 14:32:28 495

原创 ffi编译失败 *** extconf.rb failed *** 解决办法

安装cocoapods 的时候出现 fii编译错误 *** extconf.rb failed *** 需要更新一下gcc1.安装homebrew: (官网地址 需要科学上网)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"国内镜像:https://gitee.com/cunkai/HomebrewCN2.打开终端,安装gcc7brew...

2021-04-16 11:26:22 1833 1

原创 cocoapods 指定版本升级

sudo gem install -n /usr/local/bin cocoapods v 1.9.1

2021-04-16 10:25:49 281

转载 iOS App启动优化(三)—— 自己做一个工具监控App的启动耗时

前两篇介绍了《iOS App的启动流程》、《Time Profiler工具的使用》。本篇将介绍通过hook底层objc_msgSend来掌握所有Objective-C方法的执行耗时。一、什么是hook?定义:hook是指在原有方法开始执行时,换成你指定的方法。或在原有方法的执行前后,添加执行你指定的方法。从而达到改变指定方法的目的。例如:使用runtime 的 Method Swizzle。 使用Facebook所开源的fishhook框架。前者是ObjC运行时提供的“方法交换”能力。

2021-03-12 20:42:22 659

转载 iOS App启动优化(二)—— 使用“Time Profiler”工具监控App的启动耗时

一、查看耗时(1)查看Pre-Main()阶段花费的总时间想查看Pre-Main阶段的时间比较简单。直接打开Xcode,找到Product->Scheme->Edit Scheme->Run->Arguments->Environment Variables->DYLD_PRINT_STATISTICS 设置为 YESRun一下,就能看到pre-Main的耗时日志啦~(2)查看Main()函数后的花费时间查看Main函数之后的耗时,目前有两种

2021-03-12 19:46:56 1507

转载 iOS App启动优化(一)—— 了解App的启动流程

一、“冷启动”与“热启动”首先,我们先来区分两个启动的概念。 冷启动:App点击启动前,此时App的进程还不在系统里。 需要系统新创建一个进程分配给App。(这是一次完整的App启动过程) 热启动:App在冷启动后用户将App退回后台,此时App的进程还在系统里。 用户重新返回App的过程。(热启动做的事较少) 主要区别:名称 区别 冷启动 启动时,App的进程不在系统里,需要开启新进程。 热启动 启动时,App的进程还在系统里,不需要开启新进程。

2021-03-12 19:10:34 451

转载 Centos8 防火墙设置

Centos8防火墙设置 1、centos中firewalld与iptablescentos7以前的版本默认使用iptables服务进行管理防火墙规则。centos7以及其以上版本默认使用firewalld服务管理防火墙。所以在centos8中,就使用其默认的firewalld配置防火墙。firewalld和iptables的官方说明可以参照https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/

2021-03-06 22:44:23 432

原创 重学算法与数据结构系列 Java 剑指 Offer 31. 栈的压入、弹出序列

剑指 Offer 31. 栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1)

2021-02-06 21:56:09 68

原创 重学算法与数据结构系列 Java 剑指 Offer 30. 包含min函数的栈

剑指 Offer 30. 包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.t

2021-02-06 19:05:18 51

原创 重学算法与数据结构系列 Java LeetCode 232. 用栈实现队列

232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有push to top,peek/po..

2021-02-06 17:49:23 56

原创 重学算法与数据结构系列 Java LeetCode 20. 有效的括号

20. 有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例2:输入:s = "()[]{}"输出:true示例3:输入:s = "(]"输出:false示例4:输入:s = "([)]"输出:false示例5:输入:s = "{[]}...

2021-02-06 17:24:33 56

原创 iOS Tagged Pointer技术

Tagged Pointer专门用来存储小的对象,例如NSNumber和NSDate NSString2020 年 iOS14 苹果又进一步优化了tagged pointer的内存

2020-12-22 14:43:47 130

转载 对比Xcode Debug Memory Graph和FBMemoryProfiler

简介: 内存泄露一直是一个头疼的问题,需要工程化的阶段来解决。之前在每个VC的deinit打印一些日志,因为日志太多,看到泄露信息并不容易。跑Instruments成本也比较高,很多时候并不想去跑。所以对比了一下Memory Debug Graph和[FBMemoryProfiler](https://github.com/facebook/FBMemoryProfiler)。 ### Memory内存泄露一直是一个头疼的问题,需要工程化的阶段来解决。之前在每个VC的deinit打印一些日志,因为日志太

2020-12-17 01:24:02 449

转载 WKWebView与UIWebView之间内核引擎的区别

翻译文,原文地址WKWebView: Differences from UIWebView browsing engine优点多进程,在app的主进程之外执行使用更快的Nitro JavaScript引擎异步执行处理JavaScript消除某些触摸延迟支持服务端的身份校验支持对错误的自签名安全证书和证书进行身份验证问题需要iOS9或更高版本(WKWebView在iOS8引入,但是很多功能,支持比较全面在iOS9以后的版本)不支持通过AJAX请求本地存储的.

2020-12-17 00:43:42 704

原创 最新 GCD 定时器 比NSTimer更准时的定时器

#import "ViewController.h"@interface ViewController ()@property (nonatomic, strong) dispatch_source_t timer;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; dispatch_queue_t queue = dispatch_get_main_queue();// d.

2020-12-03 22:03:44 319

原创 最新 Objective-C objc_msgSend 消息发送底层原理

首先判断消息接收者是否为nil nil直接返回如果消息接收者是实例对象 它通过isa 到它的类对象的方法缓存cache(哈希表)中查找 O(1)如果消息接收者是类对象 它就通过isa 到它的元类对象中查找如果方法缓存cache找不到就到class_rw_t的方法列表中查找如果方法列表是有序的 二分查找 O(logN) 方法列表没有序 就普通线性遍历查找 O(N)如果找到了就调用方法 结束查找 并把方法 缓存到缓存列表中如果没找到且有父类就继续 到父类查找 重复上面的过程 直到基类N.

2020-11-29 18:51:25 304

原创 最新 Objective-C arm64位架构后的 isa指针 底层原理

首先 arm64位架构后的 isa指针 是个(union)共用体 储存了更多的信息union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bits; struct { // 0,代表普通的指针,存储着Class、Meta-Class对象的内存地址 1,代表优化过,使用位域存储更多的信息 uintptr_t nonpointer

2020-11-29 14:10:56 431

原创 最新 Objective-C __block 底层原理

int main(int argc, const char * argv[]) { @autoreleasepool { __block int a = 10; void(^block)(void) = ^{ a = 20; NSLog(@"=====%d",a); // 20 }; block(); } return 0;}__block 之所以.

2020-11-29 12:07:39 96

空空如也

空空如也

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

TA关注的人

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