自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GSNICE

站在牛人的肩膀上学习、总结、分享,还有其他 ......

  • 博客(204)
  • 资源 (1)
  • 收藏
  • 关注

转载 Homebrew 国内如何自动安装(国内地址)

???? 自动脚本(全部国内地址)(在终端中复制粘贴回车下面脚本)苹果电脑 常规安装脚本(推荐 完全体 几分钟安装完成):/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"苹果电脑 极速安装脚本(精简版 几秒钟安装完成):/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebr

2021-07-19 20:13:51 190

原创 Mac OS - VSCode C++开发配置

VSCode 在 Mac 上使用 C++ 相信很多人都觉得配置比较难,配置教程也各式各样。经过多次尝试,并参考了 官方教程,在原有资料的基础上进行了补充和整理,这里记录了一个我自己配置成功的方法,非常简单。⚠️注意:本文同样适用于 Windows 系统。预先安装1.安装 VSCode官方地址 Visual Studio Code on macOS2.安装插件 C/C++,在扩展插件中搜索 C++。3.确认已安装 Clang,Clang 可能在你的电脑里安装过了,打开终端,输入以下命令来确认是否

2021-06-24 12:12:15 493 2

原创 Mac OS-Charles HTTPS 抓包

Charles 安装官方下载链接:https://www.charlesproxy.com/download/Charles 配置配置电脑端的根证书打开 Charles,我这里使用的是 v4.2.7 版本安装根证书Mac 需要设置信任证书安装后会弹出钥匙串访问界面,选择安装到系统。双击证书,弹出证书详细界面,点击『信任』选项,然后将所有设置为始终信任,如图:在手机端配置根证书安装成功后信任证书,保证手机端和电脑端在同一局域网,然后在手机端设置代理,IP

2021-06-24 11:36:05 368 1

原创 iOS 计步器的几种实现方式

概述这是一篇介绍两种可以获取计步数据的方法的文章,一种是采用CMPedometer获取手机计步器数据,另一种是采用 HealthKit 框架从手机健康 App 中获取计步数据。另外也可以写入数据到健康 App。花絮用 HealthKit 框架构建 App,写入数据到苹果健康 App中,QQ 和 Keep 等第三方 App 的运动数据都会随之改变,猜测它们的运动数据是直接从苹果健康 App 中获取,而且没有过滤掉其它数据来源。而微信运动的数据不会变,猜测其来源可能是使用 CMPedometer 类获取的

2021-05-15 21:47:50 1245 4

原创 “位运算”助力高性能开发

0x00 -- 位运算概览符号 描述 运算规则 & 按位与 2个位都为1,结果为1 | 按位或 一个位为1,结果为1 ^ 按位异或 相同为0,相异为1 ~ 按位取反 1变0,0变1 <<n 左移 各二进位全部左移n位,高位丢弃,低位补0 >>n 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(

2020-11-22 17:54:03 734

原创 iOS:解出线上app中 Assets.car 的图片资源

首先到github下载cartool(没错,这就是我们即将用来取图片的神器),地址:https://github.com/GSNICE/cartool,下载好之后,解压看后打开 cartool.xcodeproj 文件,在打开的 XCode 项目中进入 Edit Scheme。之后按照下图中的操作顺序进行:注意点:Assets.car文件路径和存储图片的文件夹的文件路径顺序是固定的,Assets.car 在第一个,文件夹在第二个,如果写反就出错了,切记切记!选择 Run。选择 Arguments

2020-08-11 14:26:47 3319 1

原创 iOS:class_copyPropertyList 与 class_copyIvarList 区别

class_copyPropertyList 返回的仅仅是对象类的属性( @property 申明的属性),而 class_copyIvarList 返回类的所有属性和变量(包括在 @interface 大括号中声明的变量),下面做个简单的测试。首先,定义一个 Man 类 :@interface Man : NSObject{ NSString *IDCard; NSString *birthday; NSString *hobby;}@property (nonato

2020-07-30 17:41:59 2736

原创 Mac:Mac 上使用 adb

adb 介绍adb 全称 Android Debug Bridge,是一个开发工具,帮助安卓设备和个人计算机之间的通信。 这种通信大多是在USB电缆下进行,但是也支持Wi-Fi连接。 adb 还可被用来与电脑上运行的安卓模拟器交流通信。 adb 对于安卓开发来说就像一把“瑞士军刀”。简单说就是通过命令行调试手机,特别是当手机无法进不了系统时会很有用。Homebrew 安装brew install android-platform-tools配置环境变量打开终端,入当前用户的 home 目录打开

2020-07-29 10:05:24 3031

转载 iOS:Tableview 性能优化

Tableview 性能优化Tableview 性能优化方法总览Tableview 懒加载、Cell 重用高度缓存(因为 heightForRowAtIndexPath: 是调用最频繁的方法)当 cell 的行高固定时,使用固定行高 self.tableView.rowHeight = 88;当 cell 的行高是不固定时,根据内容进行计算后缓存起来使用。第一次肯定会计算,后续使用缓存时就避免了多次计算;高度的计算方法通常写在自定义的cell中,调用时,既可以在设置 cell 高的代理方法中使

2020-07-29 09:18:30 3734

原创 iOS:打包静态库以及 C、C++、OC 的混编

一、打包静态库创建一个名为GenerateStaticLibrary(名称可以自主命名)的静态库工程删除自动生成的GenerateStaticLibrary.h和GenerateStaticLibrary.m文件导入或新建静态库的代码(我这里新建了 C 文件和 C++ 文件)如果需要 C++ 混编,需要修改Compile Sources As为Objective-C++,否则在导入静态库的项目中混编 C++ 代码时,编译器报错修改Product->Scheme->Edit S

2020-07-14 14:16:30 3379

转载 带你打造一套 APM 监控系统(四)

七、 Crash 监控1. 异常相关知识回顾1.1 Mach 层对异常的处理Mach 在消息传递基础上实现了一套独特的异常处理方法。Mach 异常处理在设计时考虑到:带有一致的语义的单一异常处理设施:Mach 只提供一个异常处理机制用于处理所有类型的异常(包括用户定义的异常、平台无关的异常以及平台特定的异常)。根据异常类型进行分组,具体的平台可以定义具体的子类型。清晰和简洁:异常处理的接口依赖于 Mach 已有的具有良好定义的消息和端口架构,因此非常优雅(不会影响效率)。这就允许调试器和外部处

2020-07-14 11:07:34 5613

转载 带你打造一套 APM 监控系统(三)

五、 App 网络监控移动网络环境一直很复杂,WIFI、2G、3G、4G、5G 等,用户使用 App 的过程中可能在这几种类型之间切换,这也是移动网络和传统网络间的一个区别,被称为「Connection Migration」。此外还存在 DNS 解析缓慢、失败率高、运营商劫持等问题。用户在使用 App 时因为某些原因导致体验很差,要想针对网络情况进行改善,必须有清晰的监控手段。1. App 网络请求过程App 发送一次网络请求一般会经历下面几个关键步骤:DNS 解析Domain Name s

2020-07-14 11:07:14 1926

转载 带你打造一套 APM 监控系统(二)

三、 CPU 使用率监控1. CPU 架构CPU(Central Processing Unit)中央处理器,市场上主流的架构有 ARM(arm64)、Intel(x86)、AMD 等。其中 Intel 使用 CISC(Complex Instruction Set Computer),ARM 使用 RISC(Reduced Instruction Set Computer)。区别在于不同的 CPU 设计理念和方法。早期 CPU 全部是 CISC 架构,设计目的是用最少的机器语言指令来完成所需的计算任

2020-07-14 11:06:53 1937

转载 带你打造一套 APM 监控系统(一)

APM 是 Application Performance Monitoring 的缩写,监视和管理软件应用程序的性能和可用性。应用性能管理对一个应用的持续稳定运行至关重要。所以这篇文章就从一个 iOS App 的性能管理的纬度谈谈如何精确监控以及数据如何上报等技术点App 的性能问题是影响用户体验的重要因素之一。性能问题主要包含:Crash、网络请求错误或者超时、UI 响应速度慢、主线程卡顿、CPU 和内存使用率高、耗电量大等等。大多数的问题原因在于开发者错误地使用了线程锁、系统函数、编程规范问题、.

2020-07-14 11:06:31 2304

原创 iOS:蓝牙通讯中的进制转换

在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16进制(NSData)拆成2进制记录。这里我们研究下如何在他们之间进行转换。假设我们要向蓝牙发送 0x1B9901 这条数据Byte 转 NSDataByte value[3]={0};value[0]=0x1B;value[1]=0x99;value[2]=0x01;NSData * data = [NSData dataWithBytes:&am.

2020-06-27 11:48:08 1322

转载 蓝牙设备固件升级

1. 升级介绍蓝牙固件升级是使用手机给固件进行更新,以达到修复 bug 的目的,完善功能的作用。升级的大概流程是:当蓝牙设备的固件需要升级时,由嵌入式开发人员提供新的固件,由服务器管理人员将固件放到服务器上。用户打开手机 APP 的时候会检测到服务器有更新,请求更新蓝牙设备固件,确认更新后,手机会从服务器下载固件。下载完毕后,APP 会读取固件内容,并根据升级协议将内容传到蓝牙设备里,完成升级。DFU = Device Firmware Update (设备固件更新)OTA = Ov.

2020-06-27 09:20:55 12867

原创 iOS:蓝牙通讯开发快速上手

目录思维导图苹果对蓝牙设备的要求操作蓝牙设备使用的库如何扫描如何连接如何发送数据和接收数据如何解析数据扩展1. 思维导图蓝牙知识的结构图蓝牙数据通讯流程图2. 苹果对蓝牙设备的要求BLE:bluetouch low energy,蓝牙4.0设备因为低功耗,所有也叫作 BLE。苹果在 iPhone 4s 及之后的手机型号开始支持蓝牙 4.0,这也是最常见的蓝牙设备。低于蓝牙 4.0 协议的设备需要进行 MFI 认证。在进行操作蓝牙设备前,我们先下载一个蓝牙工具 LightBlu

2020-06-27 07:12:37 1655

转载 Android:神奇的约束布局 ConstraintLayout

目录1.介绍2.为什么要用ConstraintLayout3.如何使用ConstraintLayout3.1 添加依赖3.2 相对定位3.3 角度定位3.4 边距3.5 居中和偏移3.6 尺寸约束3.7 链4.辅助工具4.1 Optimizer4.2 Barrier4.3 Group4.4 Placeholder4.5.Guideline5.总结1.介绍约束布局 ConstraintLayout 是一个 ViewGroup,可以在 Api9 以上的 Android 系统

2020-06-25 23:18:08 984

原创 iOS几个关键字(nonnull、nullable、null_resettable、__null_unspecified)

1、nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值)代码: // 三种使用方式都可以 @property (nonatomic, copy, nonnull) NSString *name; @property (nonatomic, copy) NSString * _Nonnull name; @property (nonatomic, copy) NSString * __nonnull name; // 补充(不适用于assign属

2020-06-25 22:24:26 3029

原创 Mac 安装 Android Studio 以及 Android 开发环境配置

安装 Android Studio1. 下载 Android Studio下载地址:https://developer.android.google.cn/studio/直接下载最新的dmg文件,安装,一直点 Next 下一步直到完成。2. Proxy 设置打开新安装的 Android Studio点击 Android Studio选择 Preferences选择 HTTP Proxy选择 Manual proxy configuration - HTTP填写 Host name :

2020-06-21 16:58:39 29148 7

翻译 2020 年 iOS 移动开发最新发展趋势

作者 | Twinkle来源 | Mobile App Daily就像不时出现的移动技术趋势一样,了解 iOS 移动开发趋势也有重大的意义。随着 iOS 应用程序总数接近 200 万大关,与最新的iOS应用程序开发趋势保持同步已成为社区的常态。根据最新数据,大约有400万个应用程序可供用户使用。对于用户来说,这意味着他们几乎所有需求都能找到一系列应用程序。从开发人员的角度来看,应用程序商店中的应用程序数量越多,他们越需要与最新动态保持同步。我们的博客面向所有希望了解最新移动应用程序开...

2020-05-09 12:52:36 7092

转载 iOS:浅谈视图优化

引言:让我们来思考几个问题,你开发过的产品,它还有可以优化的地方吗?能增加它的帧率吗?能减少多余的CPU计算吗?是不是存在多余的GPU渲染?业务这点工作量对于越来越强大的设备面前显得微不足道,但作为一个细心的开发者,我觉得很有必要来谈谈iOS中的视图优化。本文从开发者最容易犯错的地方出发,结合例子,从以下几个角度阐述如何进行视图优化:Color Blended LayersColor...

2020-04-27 15:51:26 629

原创 VuePress 搭建个人 Blog

时隔三年,进来作者重新拾起了技术博客的折腾,记得曾经像是从看到 onevcat 漂亮的技术博客开始(起初使用的 Hexo 搭建),就想要借助 gitpage 这一免费的服务存储方式绑定自己的域名建设自己的技术博客(用来记录自己所学,所用,所看到的技术),而后发现 onevcat 又改版了,开始使用 jekyll 搭建静态博客,关键还是习惯他的博客主题,然后就又是一顿折腾,曾经因为各种环境搭建问题...

2020-04-25 22:40:55 568

原创 iOS:weak 底层实现原理

一、weak 基本用法weak 是弱引用,用 weak 来修饰、描述所引用对象的计数器并不会增加,而且 weak 会在引用对象被释放的时候自动置为 nil,这也就避免了野指针访问坏内存而引起奔溃的情况,另外 weak 也可以解决循环引用。拓展:为什么修饰代理使用 weak 而不是用 assign?assign 可用来修饰基本数据类型,也可修饰 OC 的对象,但如果用 assign 修饰对象类...

2020-04-22 21:46:15 5121

原创 iOS:使用 Apple Configurator 获取 ipa 包及资源文件

软件下载在 App Store 搜索下载【Apple Configurator】的 App。登录 Apple ID把 iPhone 连接上 Mac,点击顶部菜单栏中的 账户选择 登录 (用连接设备的 Apple ID 进行登录)。注意:需要下载的 App 需要在登录过的 Apple ID 下购买安装过才可以。注意:备份iPhone的内容(避免数据丢失,非必选)查找需要下载的 Ap...

2020-04-21 22:07:58 4589

原创 iOS:GPUImage 简介及滤镜

GPUImage 是一个开元的基于 GPU 的图片或视频的处理框架,其本身内置了多达 120 多种常见的滤镜效果,并且支持照相机和摄像机的实时滤镜,并且能够自定义图像滤镜。美颜的基本概念OpenGL ES: 开源嵌入式系统图形的处理框架,一套图形与硬件接口,创造了软件与图形加速间灵活强大的底层交互接口。用于把处理好的图片显示到屏幕上。GPU: (图形处理单元)手机或者电脑用于图像处理和渲染的...

2020-04-14 23:06:18 2244

原创 iOS:App 编译和启动原理

编译原理:将编译过程分为前端和后端两部分处理Clang(编译器前端):GCC的替代品,Clang的编译速度比GCC快1.Lexer:读入源文件,并将其转化成字符流。2.Parser:将字符流转换成AST(抽象语法树)。3.SemanticAnalysis:对输入的AST进行语法检查。4. Code Generation:代码生成,将AST转换成低层次的IR指令。LLVM(编译器后端)...

2020-04-14 15:23:45 1234

原创 iOS:第三方库之 SDWebImage

介绍github地址:https://github.com/rs/SDWebImage简介一个异步图片下载及缓存的库。特性一个扩展 UIImageView 分类的库,支持加载网络图片并缓存图片。异步图片下载器。异步图片缓存和自动图片有效期管理。支持 GIF 动态图片。支持 WebPage。背景图片减压。保证同一个 URl 不会再次下载保证无效的 URL 不会重新加载。...

2020-04-13 15:53:44 3979

原创 iOS 工程师技术要求

初级工程师* 精通 Objective-C 语言基础* 精通 UIKit 等 Cocoa Framework* 熟悉网络通信机制以及常用数据传输协议* 具备主流开源框架的使用经验中级工程师* 扎实的编程、数据结构、算法基础* 深入理解语言机制、内存管理、网络、多线程、GUI* 精通常用设计模式、框架、架构* 良好的分析、解决问题的能力高级工程师* 解决研发过程中的关键问题...

2020-04-12 22:32:58 895

原创 iOS:底层原理之 Category

Category例:Student、Student+TestStudent:-eat+runStudent+Test:-play+study对象方法:-eat、-play 都放在类对象的方法列表中类方法:+run、+study 都放在元类对象的方法列表中编译结束,Category 中的属性、协议、实例方法、对象方法都放在了 _category_t 的结构体中,并没有合并...

2020-04-12 22:30:46 489

原创 iOS:底层原理之 +load & +initialize

+load 方法+load 方法会在 runtime 加载类、分类的时候调用每个类、分类的 +load,在程序运行过程中只调用一次可以理解为加载入内存时调用。调用顺序先调用类的 +load按照编译先后顺序调用(先编译,先调用)调用子类的 +load 之前会先调用父类的 +load再调用分类的 +load按照编译顺序调用(先编译,先调用)objc4 源码解读过...

2020-04-12 22:28:10 582

原创 iOS:底层原理之 KVO & KVC

KVO通过 KVO 监听一个类的某键值属性,runtime 就会在运行时创建一个的子类 NSKVONotifying_(类名) ,如设置 Student 的 age 属性值,会调用子类中的 setAge 方法,而 setAge 方法实际调用了 Foundation 框架的 _NSSetIntValueAndNotify 方法。Foundation 框架的 _NSSetIntValueAndNo...

2020-04-12 22:23:10 667

原创 iOS:底层原理之 Objective-C 的本质

Objective-C 的本质Objective-C —> C/C++ —> 汇编语言 —> 机器语言Objective-C 是基于 C/C++ 的数据结构实现的。将 Objective-C 代码转化为 C/C++代码:xcrun -sdk iphoneos clang -rewrite-objc -arch arm64 main.m -o main.cpp模拟器(i...

2020-04-12 20:43:31 715

原创 iOS:底层原理之多线程相关

GCD常用函数GCD 中有2个用来执行任务的函数用同步的方式执行任务dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);queue:队列block:任务用异步的方式执行任务dispatch_async(dispatch_queue_t queue, dispatch_block_t block);...

2020-04-12 13:21:38 498

原创 iOS:设计模式与架构

何为架构?架构(Architecture)软件开发中的设计方案。类与类之间的关系、模块与模块之间的关系、客户端与服务端的关系。经常听到的架构名词MVC、MVP、MVVM、VIPER、CDD三层架构、四层架构…MVC - Apple版MVC - 变种MVPMVVM多层架构设计模式设计模式(Design Pattern)是一套被反复使用、代码...

2020-04-12 11:21:01 780

原创 iOS:底层原理之性能优化相关

CPU 和 GPU卡顿产生的原因帧刷新率:60帧/s:60FPS -> 16ms 计算:60 / 1000ms = 16ms掉帧:CPU 处理完后交给 GPU 去渲染,如两者合作耗时超过 16ms,就会在完成任务之前接收到垂直信号 VSync,那此帧还没完成渲染就无法进行显示,则为掉帧。卡顿优化-CPU尽量用轻量级的对象,比如用不到事件处理的地方,可以考虑用 CALayer ...

2020-04-12 11:13:06 668

原创 iOS:底层原理之内存管理相关

CADisplayLink、NSTimer使用注意CADisplayLink 保证调用频率和刷帧频率一致,60 FPS, 不用设置时间间隔,每秒钟60次。可以使用 proxy 代理解决循环引用CADisplayLink、NSTimer 会对 target 产生强引用,如果 target 又对它们产生强引用,那么就会引发循环引用。解决方案1.使用block解决方案2.使用代理对象(NSP...

2020-04-12 00:01:09 533

原创 iOS:底层原理之 Runloop

应用范畴定时器(Timer)、PerformSelectorGCD Async Main Queue事件响应、手势识别、界面刷新网络请求AutoreleasePoolRunLoop 的基本作用保持程序的持续运行处理App中的各种事件(比如触摸事件、定时器事件等)节省CPU资源,提高程序性能:该做事时做事,该休息时休息…iOS 中有 2 套 API 来访问和使用 R...

2020-04-11 23:44:20 737

原创 iOS:底层原理之 Runtime

RuntimeObjective-C 语言是一门动态性比较强的编程语言,跟 C、C++ 有着很大的不同。Objective-C 的动态性是由 Runtime API 来支撑的。Runtime 提供的接口基本是 C 语言的,源码由 C/C++/汇编语言编写。如果要学习 Runtime ,首先要了解它底层的一些常用的数据结构,如isa指针。在 arm64 架构之前,isa 就是一个普通的指...

2020-04-11 23:31:50 777

原创 iOS:底层原理之 Block

1. Block 本质block 本质上也是一个 OC 对象,它内部也有个 isa 指针block 是封装了函数调用以及函数调用环境的 OC 对象block 的底层结构如下图所示源码解析:struct __GSBlock__load_block_impl_0 { struct __block_impl impl;____①____ struct __GSBlock__load_...

2020-04-11 19:06:43 534

终端命令合集

终端命令合集

2013-10-25

空空如也

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

TA关注的人

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