自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (10)
  • 收藏
  • 关注

原创 iOS 定位服务的权限与规则——WWDC2019学习总结

一、Core LocationCore Location是iOS系统级别定位服务框架,iOS所有定位服务相关功能都与它相关工作原理简介:遍历过所有APP之后一段时间,系统会将event自动清除二、权限升级弹框策略我们都知道,在需要获取用户位置时,会先弹出提示框获得权限,再根据 API 去获取所在位置。但在 iOS 13 中,提示框内容与以往不同。会发现,iOS13时,即使App开始...

2020-05-07 17:38:11 1213

原创 iOS调试技巧——使用Python 自定义LLDB

只需要将命令command script import /Users/xx/Desktop/lldbtest.py 写入这个文件即可。至此,直接在Xcode中使用lldb打印出[MyClass lldbTest]的返回值就完成了。lldb_test表示命令名称,lldbtest是Python文件名,test是自定义方法名。/Users/xx/Desktop/lldbtest.py是Python文件路径。在使用Python 自定义LLDB之前,先了解一下LLDB的一些类型。####1、新建Python文件。

2023-10-25 11:32:22 762

原创 flutter 常用布局方式

如果想让容器与子 Widget 在主轴上完全匹配,我们可以通过设置 Row 的 mainAxisSize 参数为 MainAxisSize.min,由所有子 Widget 来决定主轴方向的容器长度,即主轴方向的长度尽可能小,类似 Android 中的 wrap_content,注意,mainAxisSize只有当 mainAxisAlignment为 MainAxisAlignment.spacexxx类型的时候才会生效。可以看到,虽然两个Container是平级,但是他们是叠放在一起的。

2023-10-25 11:18:53 551

原创 Flutter CustomScrollView 的使用 及 常用的Sliver系列组件

CustomScrollView是可以使用Sliver来自定义滚动模型(效果)的组件。它可以包含多种滚动模型。包括header,footer,CustomScrollView可以实现把多个彼此独立的可滑动widget组合起来。

2023-10-23 16:44:27 486

原创 LLDB 三种输出方式 对比及原理探索

LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存在于主窗口底部的控制台中,能够带给我们更丰富的流程控制和数据检测的调试功能。如果有访问变量的子属性,例如v variable.field1.field2,则会不断的重复读内存和类型推断的行为,最后再走到(之前在p说过的)格式化。当我们的项目过大时,就会使我们项目的编译耗时过长,如何在项目运行时进项代码调试,熟练使用LLDB就可以解决这个难题,大幅度提高我们的开发效率。

2023-10-20 16:44:43 708

原创 iOS UIWebView与WKWebView 那些事

UIWebView是iOS 2中推出的网页容器,UIWebView是最占内存的控件;直到iOS 8以后,苹果推出了WebKit框架,其中WKWebView正式被推出来接替UIWebView的位置;iOS 12中,苹果正式弃用UIWebView,要求开发者用 WKWebView 全面替换 UIWebView,apple 官方文档。

2023-10-20 16:42:18 954

原创 flutter 常用组件:列表ListView

构造函数名称特点适用场景使用频次ListView一次性创造好全部子Widget适用于展示少量连续子Widget的场景中提供了子Widget创造方法,仅在需要展示时才创建适用于子Widget较多,且视觉效果呈现某种规律性的场景高与ListView.builder类似,并提供了自定义分割线的功能与ListView.builder场景类似中。

2023-10-18 11:13:35 416

原创 flutter 常用组件:文本、图片和按钮

面对这样的需求,在 Android 中,我们使用 SpannableString 来实现;TextSpan 定义了一个字符串片段该如何控制其展示样式,而将这些有着独立展示样式的字符串组装在一起,则可以支持混合样式的富文本展示。网络图片是有缓存的,值得注意的是,图片缓存只会在运行期间生效,也就是只缓存在内存中。混合展示样式与单一样式的关键区别在于分片,即如何把一段字符串分为几个片段来管理,给每个片段单独设置样式。,在这里可以设置字体样式,字号大小,字体颜色等。在pubspec.yaml文件中注册资源。

2023-10-18 11:11:19 393

原创 iOS 借助定位实现“保活”策略

由上图可以看出,系统每次检测到位置变化时,都会产生一个event,然后遍历所有App,查看每个App是否有权限并且是该event的观察者,如果符合条件,系统就会拉起该App的进程。我们可以发现,虽然进程已经被我们主动杀死,但是当位置变化时,系统会将我们的进程拉起,并且执行方法didFinishLaunchingWithOptions中的内容(你是否有过类似的体验,当你刚刚来到一个商业区,命名没打开任何APP,手机就会收到push给你推荐周围的“吃喝玩乐”,那他们又是怎么做到的呢?

2023-10-18 11:09:25 732

原创 借助“响应链”解决实际问题

自定义按钮继承自UIButton,重写pointInside来扩大控件的响应区域。这样即使点击区域不在按钮上面,但是距离按钮边缘没有超过10像素,按钮仍然会认为当前碰触的屏幕坐标是在按钮控件当中,因此按钮可以成为此次操作的响应者来响应点击事件,这样就可以实现增大热区的效果。

2023-10-18 11:08:00 64

原创 iOS 项目避坑:多个分类中方法重复实现检测

首先定义白名单,我定义了四种类型的白名单,分别是(文件白名单、class白名单、方法白名单、文件夹白名单),白名单中的成员不在检测范围之内# 文件名白名单,格式:xxx.m# class 白名单,格式:xxx# 方法名白名单,格式:(+/-)xxx(:xxx:xxx:)# 文件夹白名单,格式:xxx。

2023-10-12 10:44:25 532

原创 flutter 常用组件:文本、图片和按钮

面对这样的需求,在 Android 中,我们使用 SpannableString 来实现;TextSpan 定义了一个字符串片段该如何控制其展示样式,而将这些有着独立展示样式的字符串组装在一起,则可以支持混合样式的富文本展示。网络图片是有缓存的,值得注意的是,图片缓存只会在运行期间生效,也就是只缓存在内存中。混合展示样式与单一样式的关键区别在于分片,即如何把一段字符串分为几个片段来管理,给每个片段单独设置样式。,在这里可以设置字体样式,字号大小,字体颜色等。在pubspec.yaml文件中注册资源。

2023-10-10 15:08:31 315

原创 flutter 绘制原理探究

翻译一下就是,Widget 描述 Element 的配置信息,是 Flutter 框架里的核心类层次结构,一个 Widget 是用户界面某一部分的不可变描述。Widgets 可以转为 Elements,Elements 管理着底层的渲染树。Widget 是 Flutter 世界里对视图的一种结构化描述,你可以把它看作是前端中的“控件”或“组件”。Widget 是控件实现的基本逻辑单位,里面存储的是有关视图渲染的配置信息,包括布局、渲染属性、事件响应信息等。

2023-10-10 14:51:46 268

原创 Flutter——Dart语言特征优化体会

一、初始代码根据 java 或者 OC 的代码习惯,定义代码如下void main() { ShoppingCart sc = ShoppingCart('购物车'); sc.items = [Item('苹果',10.0), Item('鸭梨',20.0)]; print(sc.getInfo()); }//商品Itemclass Item { double? price; String? name; Item(name,price) { this.na

2022-03-09 22:54:55 2994

原创 Flutter 初始化工程解析

工程目录介绍代码介绍示例代码在 mian.dart 这个文件中,将代码折叠可以发现,除了main函数,还有三个classmain函数:void main() { runApp(const MyApp());}只调用了一个函数runApp,runApp是一个flutter App的入口函数void runApp(Widget app) { WidgetsFlutterBinding.ensureInitialized() ..scheduleAttachRootWidget

2022-03-07 17:42:23 3532

原创 微信小程序-网络请求

一、网络请求之前在调用网络请求方法之前,需要在 「小程序后台-开发-开发设置-服务器域名」 中进行配置不配置默认网络请求时无法通过的,当然也可以关闭校验,但是只在调试的时候生效,开发完成准备上线时还是需要配置的。关闭校验:详情->本地设置->勾选 “比较严合法域名…”二、网络请求方法RequestTask wx.request(Object object)主要参数说明名称类型说明urlstring开发者服务器接口地址datastring/obj

2021-09-02 18:08:29 1482

原创 微信小程序-轮播图与列表

一、微信小程序之block在介绍轮播图、列表实现之前,先了解一个新标签 – blockblock与view,text等的区别是渲染页面时,它不实际输出自身,但包含在block块中的组件会被输出。当你需要再显示中增加逻辑的时候,那么blcok就会用到,举个例子:<block wx:if="{{isShow}}"> <view>...</view> <view>...</view> ...</block>

2021-09-01 20:03:20 804

原创 微信小程序-自定义导航组件

一、如何自定义组件从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页面拆分成多个低耦合的模块,有助于代码维护。相关文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/a、新建组件新建文件夹命名:components,之后所有的组件

2021-08-30 12:04:07 462

原创 微信小程序-用户信息及登录

一、获取用户信息的方法wx.getUserProfile(Object object)获取用户信息。页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo。实现代码:.wxml文件<!--pages/loginPage/loginPage.wxml--><view> <button bindtap="getUserInfo![请添加图

2021-08-27 18:22:50 976

原创 微信小程序-页面路由及页面生命周期

一、路由路由常用跳转方式有三种:1、wx.navigateTo(Object object)保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。页面跳转之后,会有一个返回按钮,新页面覆盖在当前页面2、wx.reLaunch(Object object)关闭所有页面,打开到应用内的某个页面页面跳转之后,会有一个home按钮,之前路由列表里面的所有页面都被销毁3、wx.redirectTo(Ob

2021-08-27 16:08:12 558

原创 微信小程序-数据变量及事件绑定初探

一、数据变量a、初始化数据在页面.js 的 data 选项中,声明变量msgdata: { msg:'原始变量msg'},b、使用数据1.模板结构中使用双大括号 {{message}}2.注意事项: 小程序中为单项数据流 model ---> view<view class="homeView"> <view class="helloView"> <text>{{msg}}</text> <

2021-08-27 01:24:58 1305

原创 微信小程序-项目内文件介绍及页面静态搭建

一、文件类型介绍新建微信小程序后会默认生成一些文件,文件类型分为四种:xxx.js、xxx.json、xxx.wxml、xxx.wxss文件类型 描述 .js文件 存放逻辑方法的地方;页面的生命周期、App的声明周期都在这个文件中 .json文件 配置文件 .wxml 页面布局文件 .wxss 用于控制wxml文件视图的样式 二、文件介绍1、App相关文件新建项目后,会默认生成app.js、app.json、.

2021-08-26 11:45:00 1106

原创 Dart学习笔记-枚举与泛型

一、枚举1、枚举是一种有穷序列集的数据类型2、使用关键字enmu定义一个枚举3、常用于代替常量,控制语句等enum Season{ spring, summer, autumn, winter}void main() { var currentSeason = Season.spring; switch(currentSeason){ case Season.spring: print("1-3月"); break; case S

2020-06-07 01:19:45 315

原创 Dart学习笔记-方法

一、方法定义方法也是对象,并且有具体类型Function返回类型、参数类型都可以省略箭头语法:=> expr 是{return expr;}缩写。只适用于一个表达式方法都有返回值。如果没有制定,默认return null左后一句执行//方法也是对象,并且有具体类型FunctionString getPerson(String name, int age){ return "名字:$name,年龄:$age";}printPerson(name,age){ print("名

2020-05-18 12:01:42 299

原创 Dart学习笔记-面向对象编程(二)

一、继承、继承中的构造函数键字extends继承一个类子类会继承父类可见的属性和方法,不会继承构造方法子类能够复写父类的方法、getter和setter单继承class Person { String name; int age; String _birthday; bool get isAdult => age > 18; void run(){ print("Person run..."); }}class Student ex

2020-05-14 17:53:11 157

原创 Dart学习笔记-面向对象编程(一)

一、类与对象,声明、创建及基本特征1、声明与创建类与对象使用关键字class声明类使用关键字new创建对象,new可省了var person = Person();2、Dart 类的特性属性默认生成getter和setter方法使用final声明的属性只有getter方法属性和方法通过.访问方法不能被重载class Person{ String name; int age; void work(){ print("Name is $name,Age is

2020-05-13 17:17:27 250

原创 Dart学习笔记-控制语句

一、if、else、else if int score = 43; if(score >= 90){ if(score == 100){ print("完美"); }else{ print("优秀"); } }else if(score > 60){ print("良好"); }else if(score =...

2020-04-29 17:12:48 185

原创 Dart学习笔记-运算符

一、算数运算符 int a = 10; int b = 2; print("a+b=${a+b}");//a+b=12 print("a-b=${a-b}");//a-b=8 print("a*b=${a*b}");//a*b=20 print("a/b=${a/b}");//a/b=5.0 print("a~/b=${a~/b}");//a~/b=5:整除 int...

2020-04-19 23:22:24 201

原创 iOS开发小技巧——增加图片按钮的响应区域

在iOS的日常开发中,经常会碰到这样的需求:图片很小,但是需要它点击的“热区”很大。方案一 控件叠加直接将一个透明的button覆盖在imageView上,来扩大图片的点击热区,这种方法简单粗暴,但是很不优雅~方案二 设置imageEdgeInsets正常情况,我们为了让图片显示大小按照规定显示,就将按钮的大小设置成和图片一样,此时图片的热区就是图片的大小 UIButton *...

2020-04-12 13:07:57 725

原创 iOS响应链那些事

一、响应链相关的两个核心函数-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event该函数判断当前可以响应的此次操作的视图- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event该函数返回当前碰触的屏幕坐标是否在当前视图中二、响应链逻辑实验自定义Butt...

2020-04-05 15:58:41 256

原创 Dart学习笔记-基础数据类型、list、map

一、变量声明1、varvar 用于声明变量,不用特指其类型。 var a; print(a);//null a = 10; print(a);//10 a = 'Hello Dart'; print(a);//Hello Dart注意:若初始化时未赋值,则变量的类型为dynamic(泛类型),之后可以给变量的赋值可以是任何类型若初始化是已经赋值,则变量的类型...

2020-03-29 14:29:00 604

原创 ios链接器探索

一、编译器 VS 解释器在谈iOS链接器之前,先理解两个概念编译器:摘自 Wiki Compiler 一段A compiler is a computer program (or a set of programs) thattransforms source code written in a programming language (the sourcelanguage) int...

2020-03-21 13:12:57 542 1

原创 iOS开发效率提升——Xcode编译性能优化操作

一、取消 Find Implicit Dependencies对所编译项目的Scheme进行配置Product > Scheme > Edit Scheme > Build亲测结果:有效!!原因:在这个选项(Find Implicit Dependencies)被选中的情况下,即使你只是对项目进行了很细微的改变,项目中的所有资源文件都会被重新编译一遍。也会对所有被改变的...

2020-03-13 19:16:08 1822

原创 iOS开发冷知识——原来UILabel的成本超出你的想象

之前看一位苹果工程师的博客,里面有提到UILabel显示文案的时候会有很大的内存消耗,建议当前隐藏或者不使用的UILabel在不影响功能的前提下,将label的文本设置为nil。内存消耗对于一个合格的iOS开发者来说是需要特别注意的点,碰到这种问题时一定要一探究竟,耳听为虚、眼见为实,立即上代码一探究竟。实例化一个屏幕大小的UILabel,不设置任何文案,只单纯设个一个背景色,代码如下:UI...

2020-03-05 18:14:09 410

原创 iOS App 启动原理(一)—— mian之前

一款 iOS App 的启动时长对于用户体验来说是至关重要的因素,也是各大公司努力优化的点。最近看了2016年WWDC的一篇视频,怕日后忘记,做一些小总结。启动过程:一、加载dyld到App进程什么是dyld?dyld的全称是dynamic loader,它的作用是加载一个进程所需要的image。这里提到的image并不是我们认知的意思,指的是Executable,Dylib或者Bundl...

2020-02-26 23:59:41 497

原创 iOS 调试技巧——LLDB

当我们的项目过大时,就会使我们项目的编译好使过长,如何在项目运行时进项代码调试,熟练使用LLDB就可以解决这个难题,大幅度提高我们的开发效率。1、什么是 LLDB?LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存在于主窗口底部的控制台中,能够带给我们更丰富的流程控制和数据检测的调试功能。2、LLDB的简单使用2.1...

2020-01-13 18:12:12 1841 1

原创 iOS 深入了解 atomic 与 nonatomic

前言:已经多年移动端开发的我宣布Property Attributes一直以来都是用nonatomic,尚未使用到atomic。场景:如今项目中有这样一个场景,在一个自定义类型的Property在一个线程中改变的同时也要同时在另一个线程中使用它,使我不得不将Property定义成atomic,但是由此发现atomic并不会保证线程安全,由此我深入查询了解下atomic 与 nonatomic,...

2018-10-09 17:40:07 2922

原创 ios 查看虚拟机中的数据库

1、首先找到虚拟机的存储地址并前往NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString* strDocDir = [paths objectAtIndex:0]; 2、打开.db文件这里推荐使用使用DB.Browse...

2018-10-08 20:13:02 620

原创 工厂方法模式(Swift、Python 双版)

最近在公司需要做一次技术分享,由于组内几乎全是 “Pythoner”,为了便于大家更好的理解,我只好硬着头皮看了看Python的基本语法,尝试着将分别用(Swift、Python)两种语言举例讲解,demo源码会在文章底部连接提供,下面步入正题。目录工厂模式分类:简单工厂、抽象工厂、工厂方法一、简单工厂二、抽象工厂三、工厂方法模式工厂模式分类:简单工厂、抽象工厂、工厂方法...

2018-08-29 19:01:17 533

原创 Android 通过facebook.stetho查询设备进程中数据库

1、集成stetho:库    compile 'com.facebook.stetho:stetho:1.3.1' 2、初始化Stetho    Stetho.initializeWithDefaults(this); 3、查询数据库    浏览器打开chrome://inspect/#devices    点击inspect后,选择所需要看的数据库表格...

2018-08-18 15:54:58 199

工厂模式demo(swift、python双语版)

使用swift、python两种语言来编写demo介绍工厂模式,便于大家理解。

2018-08-29

ios 原生与js交互

ios7之后,ios中加入了JavaScriptCore框架。该框架让Objective-C和JavaScript代码直接的交互变得更加的简单方便。ios 原生与js交互,demo代码,其中包括利用JSBinding简单使用!

2017-09-26

lxy杰伦情歌项目源码

lxy杰伦情歌项目源码

2017-03-09

iOS架构Demo(MVC、MVP)

iOS架构Demo(MVC、MVP)例子代码

2017-03-02

iOS导航下拉菜单

类似微博的iOS导航下拉菜单的实现

2016-11-30

swift 常用动画demo

swift 的几种常用动画demo

2016-10-19

OC 与 js交互

OC 与 js交互Demo

2016-10-17

函数式swift

2016-10-17

iOS zip压缩

iOS zip压缩

2016-09-01

iOS常用加密

iOS常用加密demo

2016-09-01

空空如也

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

TA关注的人

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