- 博客(44)
- 收藏
- 关注
原创 【iOS】Block、单例使用总结
block的循环引用要注意加 __weak避免循环引用__weak ViewController *weakSelf = self;1.block的声明//声明一个blocktypedef NSString *(^WXYTestBlock)(NSString *name, int age);- (void)printWithName:(NSString *)name age:(int)age block:(WXYTestBlock)block;以上声明了一个名字叫做WXYTestBloc
2022-02-14 17:02:51 1250
原创 【iOS】多线程问题总结--GCD
在 iOS 开发过程中,我们一般在主线程里边进行 UI 刷新,例如:点击、滚动、拖拽等事件。我们通常把一些耗时的操作放在其他线程,比如说图片下载、文件上传等耗时操作。而当我们有时候在其他线程完成了耗时操作时,需要回到主线程,那么就用到了线程之间的通讯。
2022-02-14 16:53:46 1604
原创 Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
2021-12-15 10:30:30 2589
原创 【iOS】下的读写锁的简单实现
废话开篇:iOS 下的多线程的技术的应用衍生出了锁的机制,试想,如果 iOS 下没有多线程的概念,所有的代码都会在同步环境下执行,那么,也就不会产生争夺资源情况的发生,当然,也就没有办法利用多核的优势。所以,多线程的应用是广布的,而锁的应用是局部的,所以,二者应相辅相成,来达到提高运行效率的同时提高程序运行的稳定性。基本的三种锁的类型:互斥锁、自旋锁、读写锁。其中,互斥锁 多线程在访问加锁中的临界区前,会进入休眠,一直等待解锁后系统调度;自旋锁 多线程在访问加锁中的临界区前,不进入休眠,会一直忙等。
2021-11-08 11:17:15 1930
原创 Jetpack中Navigation的使用
什么是NavigationNavigation 是一个框架,用于在 Android 应用中的“目标”之间导航。通俗来讲就是用于一个主Activity上多个Fragment页面的跳转。如果是比较简单的应用完全可以只用一个Activity和多个Fragment实现需要的功能。navigation由以下三个关键部分组成:导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。NavHost:显示导航图中目标的空白容器。
2021-10-25 16:22:51 538
原创 【IOS】Swift中 where关键字的使用
Swift开源库里经常能看到 where 关键字的使用1、用在do catch里面enum ExceptionError:Error{ case httpCode(Int)}func throwError() throws { throw ExceptionError.httpCode(500)}//do catchdo{ try throwError()}catch ExceptionError.httpCode(let httpCode) where httpCo
2021-10-22 11:12:11 1557
原创 iOS开发经验总结
iOS开发经验总结一、iOS加载启动图的时候隐藏statusbar只需需要在info.plist中加入Status bar is initially hidden 设置为YES就好二、 给navigation Bar 设置 title 颜色UIColor *whiteColor = [UIColor whiteColor];NSDictionary *dic = [NSDictionary dictionaryWithObject:whiteColor forKey:NSForegroundCo
2021-10-17 16:08:10 549
原创 【iOS】崩溃收集和解析
背景在日常开发中,app难免会发生崩溃。简单的崩溃还好说,复杂的崩溃就需要我们通过解析Crash文件来分析了,解析Crash文件在iOS开发中是比较常见的。获取崩溃信息方式在iOS中获取崩溃信息的方式有很多,比较常见的是使用友盟、云测、百度等第三方分析工具,或者自己收集崩溃信息并上传公司服务器。下面列举一些我们常用的崩溃分析方式:使用友盟、云测、百度等第三方崩溃统计工具。自己实现应用内崩溃收集,并上传服务器。Xcode-Devices中直接查看某个设备的崩溃信息。使用苹果提供的Crash崩
2021-10-12 18:58:36 1737
原创 【iOS】OC Swift混编
OC Swift混编iOS程序的入口在AppDelegate上面默认有个 @main 标记,这表示编译器自动生成入口代码(main函数代码), 自动设置AppDelegate为APP的代理也可以删掉 @main,自定义入口代码:新建一个main.swift文件import Foundationimport UIKitclass AYApplication: UIApplication {}UIApplicationMain(CommandLine.argc,
2021-10-08 02:49:30 352
原创 【iOS】Swift类
类的定义和结构体类似,但编译器并没有为类自动生成可以传入成员值的初始化器class Point { var x: Int = 0 var y: Int = 0}let p1 = Point()let p2 = Point(x: 10, y: 20) // 报错let p3 = Point(x: 10) // 报错let p4 = Point(y: 20) // 报错struct Point { var x: Int = 0 var y: Int = 0.
2021-09-14 15:36:01 138
原创 【iOS】Swift结构体
在Swift标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分比如Bool``Int``Double``String``Array``Dictionary等常见类型都是结构体struct Date { var year: Int var month: Int var day: Int}var date = Date(year: 2021, month: 9, day: 14)所有的结构体都有一个编译器自动生成的初始化器 (initializer, 初始
2021-09-14 14:19:44 128
原创 Android 数据库问题分析与解决
原由项目使用了一个数据库工具库,保存数据方法传递的是对象。项目接口调整新增了字段,本地订单保存到数据库的时候保存失败,是因为没有新增字段所在的列。就这个问题查看了一下数据库工具库源码分析问题并且解决问题。源码分析1、查看saveOrUpdate方法,这个方式是用来保存或者更新数据的。 @Override public void saveOrUpdate(Object entity) throws DbException { try { beginTra
2021-09-12 14:22:30 441
原创 实现简易的RPC调用
实现简易的RPC调用服务端代码public class MyServer implements Server { //端口 private Integer port; //线程池 private static ExecutorService executorService = ExecutorServiceUtil.newExecutorService(); //接口名称-接口实现Class private static Map<String,
2021-09-09 17:10:11 156
原创 IOS 多线程相关问题总结(一)GCD
多线程技术方案主要分为以下几类:其中的GCD又分为以下几类:GCD调用的四种组合(异步分派一个任务到并发队列上面)主要考察 同步异步的区别和串行/并发的理解(1)同步串行理解上面代码会产生死锁原因是:队列引起的循环等待,如下图主队列里提交了一个 viewDidLoad 和一个BLock ,这两个任务最终都要分配到主线程去处理 例如先执行 viewDidLoad 执行过程中他会调用 BLock 它要依据主队列的一个性质( 先进先出 ) 所以只有等到viewDidLoad 处理完成才
2021-09-09 15:44:00 148
原创 【IOS】崩溃复活
IOS应用崩溃一直是一个很苦恼的问题,而崩溃的同时又未获取bug原因,更令人苦恼。好在苹果自带的crash检测api,以及runloop可以让应用复活一次,不过第二次依旧会崩溃,但是还是一个很实用的小技巧。以下是IOS崩溃复活的类和使用方法#import "CrashHandler.h"//Appdelagte中注册crash记录上报- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption
2021-09-09 09:44:59 152 1
原创 【IOS】SWIFT关键字属性之@autoclosure
【IOS】SWIFT关键字属性之@autoclosureSwift 中有很多有用的属性关键字。@autoclosure 是其中之一,是一个非常常用的属性。为了更好的说明这个属性的作用,将用一个ifelse的例子进行说明。func ifelse<V>(_ condition: Bool, valueTrue: () -> V, valueFalse: () -> V) -> V { condition ? valueTrue() : valueFalse()}
2021-09-09 09:34:04 349
原创 手写迷你hashMap
public interface MyMap<K,V> {V put(K k,V v);V get(K k);interface Entry<K,V>{ K getKey(); V getValue();}}public class MyHashMap<K,V> implements MyMap<K,V> {//默认容量private static int defaultLength = 16;//加载因子pri
2021-09-08 15:59:08 82
原创 2021-09-08
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-09-08 15:58:53 79
原创 iOS UI视图相关问题总结(二)事件传递&视图响应
在看之前先看一下如上图所示:UIView 的属性 layer 和 backgroundColorbackgroundColor是对CALayer同名属性方法的一个包装,实际上UIView的显示部分是由 CALayer 的conterts 来决定的,它对应的是backing store 实际上是backmap的一个位图,最终我们显示到屏幕上面的,对应的UI控件都是位图UIView 和 CALayer的关系和区别设计原则上面的一个理解,单一职责原则遍历的方式是一倒叙的方式遍历...
2021-09-08 15:58:07 93
原创 2021-05-25
@synchronizeddispatch_semaphoreNSLockNSRecursiveLock递归锁NSConditionLock条件锁NSConditionpthread_mutexpthread_mutex(recursive)OSSpinLock锁是最常用的同步工具。一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单的互斥锁,另一个线程 B 就无法访问,只有等待前一个线程 A 执行完被保护的代码后解锁,B 线程才能访问被保护代.
2021-09-08 15:57:49 539
原创 Jetpack中Lifecycle的使用
Jetpack中Lifecycle的使用什么是JetpackJetpack是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码(说明 Jetpack 可以轻松的处理由 Android 版本不一致和设备不同产生的差异性和兼容性问题),以便可以让开发者更专注于编写他们的核心代码。什么是LifecycleLifecycle是一个可以感知宿主组件生命周期变化的组件。它持有宿主组件的生命周期信息,当宿主生命周期状态发生变化,就会去通知监听
2021-07-31 13:43:03 146
原创 【iOS】自动布局(AutoLayout)和手写布局(frame)
1.1 AutoLayout原理iOS 中视图所需要的布局信息只有两个,分别是 origin/center 和 size,在这里我们以 origin & size 为例,也就是 frame 时代下布局的需要的两个信息;这两个信息由四部分组成:x & ywidth & height以左上角的 (0, 0) 为坐标的原点,找到坐标 (x, y),然后绘制一个大小为 (width, height) 的矩形,这样就完成了一个最简单的布局。Auto Layout 的布局方式与上面所说
2021-07-19 17:20:09 1420 1
原创 setContentView原理解析
前言我们对 setContentView 应该都很熟悉,也都知道它是用来设置我们的布局的。之前只会用,闲来无事研究一下底层是怎么实现的。使用方式public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set
2021-06-27 18:09:09 455
转载 Android-动态规划
1、一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?思路:对于(0,0)这个点而言,只能向右或者向下移动;反向思维,到达(2,2)只能施(2,1)和(1,2),那么动态规划的方程就可以得出:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]/** * 没有障碍物 * * @
2021-06-25 17:58:09 70
原创 【IOS】OC底层-结构体指针内存对齐
【IOS】OC底层-结构体指针内存对齐1、首先创建一个项目并创建一个对象。为了方便直接在main函数里面测试 2、使用终端命令 cd到main.m文件所在目录 输入终端命令: xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp 这里需要注意:xcrun :Xcode 工具,-sdk: 平台 iphoneos:iOS平台, -arch: 基于什么架构 苹果手机是基于arm64的,-
2021-06-25 10:04:29 234
原创 iOS UI视图相关问题总结(一)UITableVIew相关(重用机制与数据源同步问题)
iOS UI视图相关问题总结(一)UITableVIew相关(重用机制与数据源同步问题)1.UITableVIew相关(重用机制与原理)如图所示: tableview向上滑动,A1被加入到重用池当中(在屏幕以外),(A3到A5在屏幕中显示,A2和A6在屏幕当中显示一半)如果继续滑动,A7就会从重用池当中根据 指定的identfer标识符 取出一个可重用的cell 。如果A1到A7都是同一个标识符的话,A7就可以复用A1所创建cell的内存。这样就可以实现复用或重用的目的代码示例:通过自定义U
2021-06-16 10:57:12 330
原创 Android 声明性布局Compose预研
Android 声明性布局Compose预研背景一些问题需求测试文本测试原生Compose总结多组件测试背景一些问题命令式UI痛点一在android发展的长河中,android的视图层次结构一直是一种多叉树的结构,创建过程是一种命令方式呈现应用界面。其中xml布局的读取解析,不仅会造成io性能消耗和反射创建标签对于的view造成的性能消耗。不仅如此,这种命令形式下,会提高视图出错的可能性,体现在多视图更新上,会有遗漏操作或者更新命令冲突的情况。MVVM+Databinding当然,在使
2021-06-11 17:46:28 658 3
原创 Java动态代理
一.什么是代理代理模式:显示生活中的代理。比如,买一瓶矿泉水。一种去矿泉水生产厂家购买,另一种找到矿泉水代理商购买,代理商统一去厂家进货,分销给顾客。二.动态模式介绍Java中代理的的便是对象或者方法。给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能.Java种常见代理有静态代理和动态代理。三.动态代理和静态代理静态代理在程序运行前就已经存在代理类的字节码文件,代理类和
2021-06-04 15:56:25 114
转载 一文教你高效画出技术架构图-读后感
原文地址 作者介绍作者:三画简介:阿里巴巴技术专家,梓敬、鹏升和余乐对此文亦有贡献。三画曾多年从事工作流引擎研发工作,现专注于高并发移动互联网应用的架构和开发。文章中内容:讲解画图的方法论,有哪些视图(4+1),推荐的画图方法(C4模型:主要针对软件架构师和开发人员),同时分享了"三画"他们公司数据工具的案例,同时文章尾部分享了一些画图工具(Keynote,Xmind,EdrawMax,Visio,OmniGraffle,Process On)学习到的地方:画图是为了.
2021-06-02 11:31:50 219
原创 Mysql优化
Mysql优化一、存储引擎存储引擎是一种用来存储MySQL中对象(记录和索引)的一种特定的结构(文件结构),处于MySQL服务器的最底层,本质就是特定的数据存储格式。InnoDB:支持事务,行级锁定,外键约束。事务安全型存储引擎。更加注重数据的完整性和安全性,不擅长快速插入(插入前要排序,消耗时间)和检索。MyISAM:占用空间小,处理速度快,擅长插入和查询。不支持事务,并发性能差。其他存储引擎1、Archive:存档型,仅提供插入和查询操作。非常高效阻塞的插入和查询。2、Memory:内存型
2021-06-02 09:57:22 93
原创 java对象
1、java创建对象的4种方法1.new语句,最常用的方式 简单快捷1. 首先在方法区的常量池中查看是否有new 后面参数类名的符号引用,并检查是否有类的加载信息也就是是否被加载解析和初始化过2. 给实例分配内存、调用构造函、初始化成员字段、user对象指向分配的内存空间2.反射,调用Java.lang.Class或者java.lang.reflect.Constructor类的newInstance()方法。newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数
2021-05-28 17:13:32 257
原创 RESTful web API
一、REST名称的由来REST是"Representational State TRansfer"的缩写,可以翻译为"表现状态转换",可以简单称为REST或者RESTful。REST是一种“分布式超媒体应用(Distributed Hypermedia System)”的架构风格。Hypermedia as the engine of application state这里的应用状态 application state表示web应用的客户端状态。简单理解为会话状态。资源在浏览器中以超媒体形式呈现,通
2021-05-28 17:00:18 665
原创 【iOS】Runtime与对象模型
一. Runtime是什么Runtime 是一个共享动态库,其目录位于 /usr/include/objc,由一系列的C函数和结构体构成。和 Runtime 系统发生交互的方式有三种,一般都是用前两种∶使用OC源码 直接使用上层OC源码,底层会通过 Runtime 为其提供运行支持,上层不需要关/心 Runtime 运行。NS0bject 在OC代码中绝大多数的类都是继承自 NSObject 的, NSProxy 类例外。 Runtime 在 NS0bject 中定义了一些基础操作, NSObje
2021-05-27 11:42:09 158
原创 【iOS】视频播放之AVPlayer
【iOS】视频播放之AVPlayeriOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下:使用环境优点缺点AVPlayerViewControllerAVKit简单易用不可定制MPMoviePlayerControllerMediaPlayer简单易用不可定制IJKPlayerIJKMediaFrameWork定制度高,可支持流媒体播放使用复杂AVPlayerAVFoundation可定制度高,功能强大不支持流媒体
2021-05-26 16:40:24 3475 2
原创 【H5】create-react-app
create-react-app脚手架搭建react项目Quick Start(快速入门)全局安装首先确保你电脑上安装最新的版本#全局安装npm install -g create-react-app#构建一个my-app的项目npx create-react-app my-appcd my-app启动编译当前的React项目,并自动打开 http://localhost:3000/npm start以上命令执行完成后,则自动打开: http://localhost:3000/如果你
2021-05-26 10:20:21 310
原创 【iOS】通过OC类的本质初探OC方法调用
OC对象的分类OC对象主要分为三种instance对象(实例对象)class对象(类对象)meta-class对象(元类对象)instance对象instance对象就是通过类alloc出来的对象,每次调用alloc都会产生新的instance对象// object1、object2是NSObject的instance对象(实例对象)NSObject *object1 = [[NSObject alloc] init];NSObject *object2 = [[NSObject al
2021-05-25 18:15:51 259
原创 Android-新手引导层镂空裁剪层
前言满足自定义蒙层颜色,裁剪区域尺寸,自定义说明布局位置,满足自己项目中所需即可,如下图展示:实现原理1、浮层的位置在activity的DecorView中,DecorView是FrameLayout的子类,所以整个蒙层,都是基于FrameLayout实现代码如下: if (anchor == null) { anchor = activity.findViewById(android.R.id.content); } if (ancho
2021-05-24 15:49:41 546
原创 鸿蒙OS入门
鸿蒙OS入门1、系统定义HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备。2、开发准备(1)、下载安装HUWEI DevEco Studio,搭建开发环境,详细参考官网DevEco Studio(2)、程序运行模拟器,真机3、开发(1)、Page AbilityA、生
2021-05-24 15:44:00 242
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人