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

原创 iOS 定位服务的权限与规则——WWDC2019学习总结
一、Core LocationCore Location是iOS系统级别定位服务框架,iOS所有定位服务相关功能都与它相关工作原理简介:遍历过所有APP之后一段时间,系统会将event自动清除二、权限升级弹框策略我们都知道,在需要获取用户位置时,会先弹出提示框获得权限,再根据 API 去获取所在位置。但在 iOS 13 中,提示框内容与以往不同。会发现,iOS13时,即使App开始...
2020-05-07 17:38:11
1517
原创 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
980
原创 flutter 常用布局方式
如果想让容器与子 Widget 在主轴上完全匹配,我们可以通过设置 Row 的 mainAxisSize 参数为 MainAxisSize.min,由所有子 Widget 来决定主轴方向的容器长度,即主轴方向的长度尽可能小,类似 Android 中的 wrap_content,注意,mainAxisSize只有当 mainAxisAlignment为 MainAxisAlignment.spacexxx类型的时候才会生效。可以看到,虽然两个Container是平级,但是他们是叠放在一起的。
2023-10-25 11:18:53
664
原创 Flutter CustomScrollView 的使用 及 常用的Sliver系列组件
CustomScrollView是可以使用Sliver来自定义滚动模型(效果)的组件。它可以包含多种滚动模型。包括header,footer,CustomScrollView可以实现把多个彼此独立的可滑动widget组合起来。
2023-10-23 16:44:27
654
原创 LLDB 三种输出方式 对比及原理探索
LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存在于主窗口底部的控制台中,能够带给我们更丰富的流程控制和数据检测的调试功能。如果有访问变量的子属性,例如v variable.field1.field2,则会不断的重复读内存和类型推断的行为,最后再走到(之前在p说过的)格式化。当我们的项目过大时,就会使我们项目的编译耗时过长,如何在项目运行时进项代码调试,熟练使用LLDB就可以解决这个难题,大幅度提高我们的开发效率。
2023-10-20 16:44:43
880
原创 iOS UIWebView与WKWebView 那些事
UIWebView是iOS 2中推出的网页容器,UIWebView是最占内存的控件;直到iOS 8以后,苹果推出了WebKit框架,其中WKWebView正式被推出来接替UIWebView的位置;iOS 12中,苹果正式弃用UIWebView,要求开发者用 WKWebView 全面替换 UIWebView,apple 官方文档。
2023-10-20 16:42:18
1219
原创 flutter 常用组件:列表ListView
构造函数名称特点适用场景使用频次ListView一次性创造好全部子Widget适用于展示少量连续子Widget的场景中提供了子Widget创造方法,仅在需要展示时才创建适用于子Widget较多,且视觉效果呈现某种规律性的场景高与ListView.builder类似,并提供了自定义分割线的功能与ListView.builder场景类似中。
2023-10-18 11:13:35
486
原创 flutter 常用组件:文本、图片和按钮
面对这样的需求,在 Android 中,我们使用 SpannableString 来实现;TextSpan 定义了一个字符串片段该如何控制其展示样式,而将这些有着独立展示样式的字符串组装在一起,则可以支持混合样式的富文本展示。网络图片是有缓存的,值得注意的是,图片缓存只会在运行期间生效,也就是只缓存在内存中。混合展示样式与单一样式的关键区别在于分片,即如何把一段字符串分为几个片段来管理,给每个片段单独设置样式。,在这里可以设置字体样式,字号大小,字体颜色等。在pubspec.yaml文件中注册资源。
2023-10-18 11:11:19
497
原创 iOS 借助定位实现“保活”策略
由上图可以看出,系统每次检测到位置变化时,都会产生一个event,然后遍历所有App,查看每个App是否有权限并且是该event的观察者,如果符合条件,系统就会拉起该App的进程。我们可以发现,虽然进程已经被我们主动杀死,但是当位置变化时,系统会将我们的进程拉起,并且执行方法didFinishLaunchingWithOptions中的内容(你是否有过类似的体验,当你刚刚来到一个商业区,命名没打开任何APP,手机就会收到push给你推荐周围的“吃喝玩乐”,那他们又是怎么做到的呢?
2023-10-18 11:09:25
1122
原创 借助“响应链”解决实际问题
自定义按钮继承自UIButton,重写pointInside来扩大控件的响应区域。这样即使点击区域不在按钮上面,但是距离按钮边缘没有超过10像素,按钮仍然会认为当前碰触的屏幕坐标是在按钮控件当中,因此按钮可以成为此次操作的响应者来响应点击事件,这样就可以实现增大热区的效果。
2023-10-18 11:08:00
103
原创 iOS 项目避坑:多个分类中方法重复实现检测
首先定义白名单,我定义了四种类型的白名单,分别是(文件白名单、class白名单、方法白名单、文件夹白名单),白名单中的成员不在检测范围之内# 文件名白名单,格式:xxx.m# class 白名单,格式:xxx# 方法名白名单,格式:(+/-)xxx(:xxx:xxx:)# 文件夹白名单,格式:xxx。
2023-10-12 10:44:25
619
原创 flutter 常用组件:文本、图片和按钮
面对这样的需求,在 Android 中,我们使用 SpannableString 来实现;TextSpan 定义了一个字符串片段该如何控制其展示样式,而将这些有着独立展示样式的字符串组装在一起,则可以支持混合样式的富文本展示。网络图片是有缓存的,值得注意的是,图片缓存只会在运行期间生效,也就是只缓存在内存中。混合展示样式与单一样式的关键区别在于分片,即如何把一段字符串分为几个片段来管理,给每个片段单独设置样式。,在这里可以设置字体样式,字号大小,字体颜色等。在pubspec.yaml文件中注册资源。
2023-10-10 15:08:31
372
原创 flutter 绘制原理探究
翻译一下就是,Widget 描述 Element 的配置信息,是 Flutter 框架里的核心类层次结构,一个 Widget 是用户界面某一部分的不可变描述。Widgets 可以转为 Elements,Elements 管理着底层的渲染树。Widget 是 Flutter 世界里对视图的一种结构化描述,你可以把它看作是前端中的“控件”或“组件”。Widget 是控件实现的基本逻辑单位,里面存储的是有关视图渲染的配置信息,包括布局、渲染属性、事件响应信息等。
2023-10-10 14:51:46
314
原创 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
3067
原创 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
3649
原创 微信小程序-网络请求
一、网络请求之前在调用网络请求方法之前,需要在 「小程序后台-开发-开发设置-服务器域名」 中进行配置不配置默认网络请求时无法通过的,当然也可以关闭校验,但是只在调试的时候生效,开发完成准备上线时还是需要配置的。关闭校验:详情->本地设置->勾选 “比较严合法域名…”二、网络请求方法RequestTask wx.request(Object object)主要参数说明名称类型说明urlstring开发者服务器接口地址datastring/obj
2021-09-02 18:08:29
1614
原创 微信小程序-轮播图与列表
一、微信小程序之block在介绍轮播图、列表实现之前,先了解一个新标签 – blockblock与view,text等的区别是渲染页面时,它不实际输出自身,但包含在block块中的组件会被输出。当你需要再显示中增加逻辑的时候,那么blcok就会用到,举个例子:<block wx:if="{{isShow}}"> <view>...</view> <view>...</view> ...</block>
2021-09-01 20:03:20
1002
原创 微信小程序-自定义导航组件
一、如何自定义组件从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页面拆分成多个低耦合的模块,有助于代码维护。相关文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/a、新建组件新建文件夹命名:components,之后所有的组件
2021-08-30 12:04:07
557
原创 微信小程序-用户信息及登录
一、获取用户信息的方法wx.getUserProfile(Object object)获取用户信息。页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo。实现代码:.wxml文件<!--pages/loginPage/loginPage.wxml--><view> <button bindtap="getUserInfo![请添加图
2021-08-27 18:22:50
1146
原创 微信小程序-页面路由及页面生命周期
一、路由路由常用跳转方式有三种:1、wx.navigateTo(Object object)保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。页面跳转之后,会有一个返回按钮,新页面覆盖在当前页面2、wx.reLaunch(Object object)关闭所有页面,打开到应用内的某个页面页面跳转之后,会有一个home按钮,之前路由列表里面的所有页面都被销毁3、wx.redirectTo(Ob
2021-08-27 16:08:12
773
原创 微信小程序-数据变量及事件绑定初探
一、数据变量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
1509
原创 微信小程序-项目内文件介绍及页面静态搭建
一、文件类型介绍新建微信小程序后会默认生成一些文件,文件类型分为四种: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
1240
原创 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
377
原创 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
373
原创 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
191
原创 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
298
原创 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
245
原创 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
246
原创 iOS开发小技巧——增加图片按钮的响应区域
在iOS的日常开发中,经常会碰到这样的需求:图片很小,但是需要它点击的“热区”很大。方案一 控件叠加直接将一个透明的button覆盖在imageView上,来扩大图片的点击热区,这种方法简单粗暴,但是很不优雅~方案二 设置imageEdgeInsets正常情况,我们为了让图片显示大小按照规定显示,就将按钮的大小设置成和图片一样,此时图片的热区就是图片的大小 UIButton *...
2020-04-12 13:07:57
896
原创 iOS响应链那些事
一、响应链相关的两个核心函数-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event该函数判断当前可以响应的此次操作的视图- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event该函数返回当前碰触的屏幕坐标是否在当前视图中二、响应链逻辑实验自定义Butt...
2020-04-05 15:58:41
322
原创 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
669
原创 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
598
1
原创 iOS开发效率提升——Xcode编译性能优化操作
一、取消 Find Implicit Dependencies对所编译项目的Scheme进行配置Product > Scheme > Edit Scheme > Build亲测结果:有效!!原因:在这个选项(Find Implicit Dependencies)被选中的情况下,即使你只是对项目进行了很细微的改变,项目中的所有资源文件都会被重新编译一遍。也会对所有被改变的...
2020-03-13 19:16:08
1963
原创 iOS开发冷知识——原来UILabel的成本超出你的想象
之前看一位苹果工程师的博客,里面有提到UILabel显示文案的时候会有很大的内存消耗,建议当前隐藏或者不使用的UILabel在不影响功能的前提下,将label的文本设置为nil。内存消耗对于一个合格的iOS开发者来说是需要特别注意的点,碰到这种问题时一定要一探究竟,耳听为虚、眼见为实,立即上代码一探究竟。实例化一个屏幕大小的UILabel,不设置任何文案,只单纯设个一个背景色,代码如下:UI...
2020-03-05 18:14:09
465
原创 iOS App 启动原理(一)—— mian之前
一款 iOS App 的启动时长对于用户体验来说是至关重要的因素,也是各大公司努力优化的点。最近看了2016年WWDC的一篇视频,怕日后忘记,做一些小总结。启动过程:一、加载dyld到App进程什么是dyld?dyld的全称是dynamic loader,它的作用是加载一个进程所需要的image。这里提到的image并不是我们认知的意思,指的是Executable,Dylib或者Bundl...
2020-02-26 23:59:41
571
原创 iOS 调试技巧——LLDB
当我们的项目过大时,就会使我们项目的编译好使过长,如何在项目运行时进项代码调试,熟练使用LLDB就可以解决这个难题,大幅度提高我们的开发效率。1、什么是 LLDB?LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存在于主窗口底部的控制台中,能够带给我们更丰富的流程控制和数据检测的调试功能。2、LLDB的简单使用2.1...
2020-01-13 18:12:12
2575
1
原创 iOS 深入了解 atomic 与 nonatomic
前言:已经多年移动端开发的我宣布Property Attributes一直以来都是用nonatomic,尚未使用到atomic。场景:如今项目中有这样一个场景,在一个自定义类型的Property在一个线程中改变的同时也要同时在另一个线程中使用它,使我不得不将Property定义成atomic,但是由此发现atomic并不会保证线程安全,由此我深入查询了解下atomic 与 nonatomic,...
2018-10-09 17:40:07
3032
原创 ios 查看虚拟机中的数据库
1、首先找到虚拟机的存储地址并前往NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString* strDocDir = [paths objectAtIndex:0]; 2、打开.db文件这里推荐使用使用DB.Browse...
2018-10-08 20:13:02
668
原创 工厂方法模式(Swift、Python 双版)
最近在公司需要做一次技术分享,由于组内几乎全是 “Pythoner”,为了便于大家更好的理解,我只好硬着头皮看了看Python的基本语法,尝试着将分别用(Swift、Python)两种语言举例讲解,demo源码会在文章底部连接提供,下面步入正题。目录工厂模式分类:简单工厂、抽象工厂、工厂方法一、简单工厂二、抽象工厂三、工厂方法模式工厂模式分类:简单工厂、抽象工厂、工厂方法...
2018-08-29 19:01:17
569
原创 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
242
ios 原生与js交互
2017-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人