自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (2)
  • 收藏
  • 关注

原创 微信小程序+Taro 混编,Taro 使用微信原生 behaviors

最近有一个小程序项目,因为一些原因项目架构选择了微信小程序原生+Taro 混编的方式进行开发,在开发的过程中发现 Taro 不支持使用原生的 behaviors 特性,因为混编的原因项目当中已有原生页面在使用 behaviors,所以需要一个方案在不影响其他页面的基础上使 Taro 也能使用这一特性。(它使用了 behaviors)到 Taro 页面做为中转的方式解决了这一棘手的问题。通过中转组件就可以在 Taro 页面调用到 behaviors 的方法,以及使用 behaviors 生命周期的封装。

2023-08-24 16:02:21 2269 2

原创 iOS-透明的 webView

原生 app 上放置一张撑满屏幕的图片,创建一个 webView 盖在图片上。要实现 webView 是透明的效果需要。

2023-06-06 15:38:14 544

原创 iOS OC 实现 swift defer 效果

swift 中有个我很喜欢的用法:defer。效果是,当 defer 所在作用域将要结束时,系统会调用 defer 花括号里的内容。比如,请求接口时需要展示 loading,接口完成或者某些条件不满足下要移除 loading,这时可能需要在多处调用移除 loading,一是可读性不强,二是很有可能会忘记调用移除 loading 代码。这时,defer 就派上用场了。func requestData() { defer { hideLoading() } showLoading() ....

2022-01-19 18:10:03 2360

原创 iOS Block clang 转 c++ 后底层解析

有一个类 BlockClass, 该类有一个类方法 +funcTest情景一: 为什么外界修改了变量 a 的值, 调用block时打印的值不变?#import "BlockClass.h"@implementation BlockClass+ (void) funcTest { int a = 10; NSLog(@"a1: %p, %d", &a,a); void(^blockName)(void) = ^{ NSLog(@"block 内 a: %

2021-09-01 19:43:18 329

原创 iOS AutoreleasePool 原理

@autoreleasepool { Person *p = [Person new];}等价于void *atautoreleasepoolobj = objc_autoreleasePoolPush();Person *p = [[Person new] autorelease];objc_autoreleasePoolPop(atautoreleasepoolobj);void *objc_autoreleasePoolPush(void) { return..

2021-08-31 20:41:55 637

原创 iOS hook +load方法(A4LoadMeasure)

参考hook +load 方法的前提要是在它被调用之前处理.我们知道 +load 方法是在 dyld 加载完动态库后, 调用_objc_init

2021-08-25 18:44:47 1229

原创 iOS 类结构体 (导图)

画了张图网图

2021-08-17 17:22:59 118

原创 几种常见的锁&信号量&栅栏函数

多线程1. 信号量: 类似于锁的作用// 创建信号量dispatch_semaphore_create(longvalue);// 信号量+1dispatch_semaphore_signal(dispatch_semaphore_tdeem);// 信号量==0 ? 等待: 信号量-1并继续执行dispatch_semaphore_wait(dispatch_semaphore_tdsema,dispatch_time_ttimeout);业务场景: 异步转同步; 任务..

2021-08-13 18:53:10 185

原创 iOS GNUstep源码分析之 KVO

思维导图:两个主要方法:// 添加观察者, 监听本函数调用者的成员变量aPath的改变- (void) addObserver: (NSObject*)anObserver forKeyPath: (NSString*)aPath options: (NSKeyValueObservingOptions)options context: (void*)aContext;// 接收 keyPath 值修改的通知- (void)observeValueForKeyPa

2021-08-12 18:30:35 406

原创 iOS 源码分析之 _objc_msgSend(思维导图)

+ (void)initialize 懒加载调用.当首次创建某个类的实例对象时, 会层层调用1. Class class_initialize(Class cls, id obj)2. static Class initializeAndMaybeRelock(Class cls, id inst, mutex_t& lock, bool leaveLocked)3.void initializeNon...

2021-08-09 17:31:06 186

原创 flutter 单线程异步 及 isolate 使用过程遇到的问题

基本信息: Dart 是单线程模型.线程内部维护一个loop. loop包括两个队列, 队列里就是Future任务:microask queueevent queue且前者执行优先级高于后者, 如图我们平时写的代码就运行在flutter创建好的UI线程. 当运行耗时代码时页面会有卡顿感, 就是掉帧了.解决方案: 开辟新线程处理耗时操作, 把处理结果传给 UI 线程刷新页面.Dart 开辟新线程的方式是使用 isolate.isolate 与普通线程的区别在于: isolate之.

2021-07-20 18:32:30 1013

原创 iOS 允许http请求 关于NSAppTransportSecurity 和 NSExceptionDomains 的关系

当项目设置了 NSExceptionDomains, 不管 NSAllowsArbitraryLoads 是 true/false, NSExceptionDomains 下面 NSExceptionAllowsInsecureHTTPLoads 的值决定了是否允许 http 请求以阿里云的域名为例, 访问http://aliyuncs.com以下两种情况允许 http 请求允许个别域名 http 请求:(1) NSAllowsArbitraryLoads: false,(2) NSExce

2021-07-16 18:02:54 2966

原创 flutter swiper插件报错: ScrollController not attached to any scroll views

key: UniqueKey()Swiper( key: UniqueKey(), //添加key autoplay: true, loop: (widget.datas.length > 1) ? true : false, physics: const PageScrollPhysics(parent: const BouncingScrollPhysics()), itemBuilder: (BuildC..

2021-05-06 18:23:59 235

原创 pod install 超时, 卡住某个库

Error installing FMDB[!] /usr/local/bin/git clone https://github.com/ccgus/fmdb.git /var/folders/9t/2p60ltxs0zx3bhgp2cy935dr0000gn/T/d20210319-33593-r7vcb5 --template= --single-branch --depth 1 --branch 2.7.5Cloning into '/var/folders/9t/2p60ltx...

2021-03-19 16:32:00 2542

原创 flutter 通过GlobalKey在自定义Widget外部获取其state刷新页面

PageA的定义如下class PageA extends StatefulWidget { PageA({Key key}) : super(key: key); @override PageAState createState() { return PageAState(); }}class PageAState extends State<PageA> { static GlobalKey homeKey = GlobalKey(); ///获.

2021-01-14 18:05:02 1046

原创 flutter push新页面A, 并且该页面关闭时返回的是首页

var router = MaterialPageRoute( builder: (context) => APage();///跳转A页 && 移除导航栈里除了首页的路由Navigator.pushAndRemoveUntil(context, router, (route) { return route.isFirst; ///导航栈的第一个: 首页});...

2021-01-14 16:11:49 566

原创 flutter pop回首页, 不管导航栈有多少路由

Navigator.popUntil(context, (route) { return route.isFirst;});

2021-01-14 16:08:21 545

原创 flutter setState解析 & frameWork层和engine层的交互

有状态的widget(StatefulWidget) UI刷新要调用setState.自定义的StatefulWidget要重写setState方法.那么setState内部做了什么处理, 刷新流程是怎样的呢?@protected void setState(VoidCallback fn) { ... _element.markNeedsBuild(); }void markNeedsBuild() { ... if (dirty)

2020-11-20 18:49:50 366

原创 flutter Dart Mixin后关于调用super的理解

上代码abstract class BaseClass { funcPrint() { print("BaseClass\n"); }}mixin AClass on BaseClass { funcPrint() { print("AClass\n"); super.funcPrint(); }}mixin BClass on BaseClass { funcPrint() { print("BClass\n"); super.fu

2020-11-17 10:52:15 1280 1

原创 flutter-关于更新flutter本地库 flutter upgrade 和 flutter channel

今天发现一个问题:同事的电脑命令行输入:flutter upgrade flutter本地库版本升级到了v1.22我的电脑输入: flutter upgrade flutter本地库版本升级到了v1.24竟然没有升级到相同的版本…后来发现是因为我俩的flutter channel不在同一个分支上, 我在dev分支, 他在stable分支.切换到同一个分之后再敲命令flutter upgrade 就会更新到相同的flutter 版本了...

2020-10-26 17:18:29 2372

原创 flutter TextField 键盘弹出和隐藏,限制仅英文输入, 禁止联想输入

var focusNode = FocusNode(); RegExp englishRegExp = RegExp(r'(^[a-zA-Z]*$)'); String inputText = ''; showKeyboard() { focusNode.requestFocus();}dismissKeyboard() { focusNode.unfocus();}getTextField() { var currentModel = currentItem(); ..

2020-10-22 16:41:30 3481 1

原创 flutter-获取父widget的大小

方法就是在原组件的外面加一层LayoutBuilder注释的第一句话白话翻译: 依据父widget的大小创建一棵widget树/// Builds a widget tree that can depend on the parent widget's size.////// Similar to the [Builder] widget except that the framework calls the [builder]/// function at layout time and pro

2020-09-23 18:41:56 2771

原创 flutter - 报错: setState() or markNeedsBuild() called during build

当首次进入页面, 弹出自定义的引导页面代码如下@override initState() { super.initState(); showTipsView(); }showTipsView() { showGeneralDialog(context: context, barrierDismissible: false, barrierLabel: "", barrierColor: Colors.black.withAlpha(40),

2020-08-21 17:55:45 3409

原创 Future-怎么停止一个未开始执行的延时任务

执行一个延时任务,一般会用Future.delayed,比如延时0.5s播放一个音频文件Future.delayed(Duration(milliseconds: 500), () { playAudio(url);});现在有一个需求:点击<下一步>按钮时停止播放。0.5s后执行任务,音频播放的过程中停止播放:audioPlayer.stop();0.5s前点击了<下一步>按钮,需要停掉还未执行的任务,...

2020-07-16 18:53:33 1013

原创 从微信跳转第三方app:在微信打开h5页面后,点击触发跳转自己app指定页面

今天,朋友发来一条拼多多砍价消息,点击链接跳转到下面的H5页面,点击允许,跳转到拼多多的App Store页面,到这都很正常对吧,神奇的是点击打开后跳转到了指定的页面,不只是简单的打开app想了下他是怎么实现从App Store跳转到app后打开指定页面的,猜测可能用到了粘贴板的功能,先把一个有规则的字符串存到粘贴板,打开app的时候检测剪贴板,如果是符合规则就解析并跳转实际测试后验证了这个猜想。点击“允许”后,随便找个输入框,粘贴后发现就是开头讲的H5链接里的一个字符串。感觉这真的是一个很好的

2020-06-17 17:24:44 7694 1

原创 Flutter 路由原理解析

原理详解源码详解

2020-05-09 16:05:21 252

原创 Flutter BuildContext与Element的关系

首先,BuildContext是一个抽象类,可以理解为iOS里的protocol而Element是实现了该协议的类,看下面的源码就知道了abstract class Element extends DiagnosticableTree implements BuildContext...

2020-04-17 15:12:58 270

原创 Flutter 打开背景透明的路由页面

1、PageRouteBuilder – opaque:false2、Scaffold-- backgroundColor: Colors.transparentNavigator.of(context).push( PageRouteBuilder( opaque:false, pageBuilder: (context, animation, secondaryAn...

2020-03-25 16:29:16 4620 4

原创 Alamfire请求接口时参数的几种编码形式

例如:域名:https://xxx.com参数:["name": "littleFish", "height": 167, "weight": 100]1、URLEncodingURLEncoding有两种编码格式: 拼接到url后面或者放在body里,具体哪种形式要看destination属性的设置public let destination: Alamofire.URLEncodi...

2019-10-25 13:57:37 520

原创 swift OC混编工程,xcode断点调试,控制台左侧只有变量名称不显示值,右侧输入po命令,打印除一堆提示

断点调试(lldb) po 变量名warning: Swift error in module 项目名.Debug info from this module will be unavailable in the debugger.error: in auto-import:failed to get module '项目名' from AST context:...这种情况,请仔细检查你的桥接文...

2018-03-21 15:37:18 2621

原创 执行到reloadData()方法会立刻返回,不会等到刷新完成才返回

UITableView和UICollectionView都有reloadData方法。如题,可以理解为reloadData()方法是一个异步的方法,非同步执行完成其内部的代码。执行到collectionView.reloadData()就立刻返回,此时collectionView还未真的刷新完成。比如有一个需求是,数据源list新增几条数据,刷新collectionView后立刻更新collect...

2018-02-28 17:33:44 1774

原创 iOS8 - tableView: canEditRowAtIndexPath: 因数组越界崩溃

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ StockInListModel *model = self.stockInList[indexPath.row];//崩在这了,因为数组越界 return model.stockInStatus ==

2017-11-09 18:16:49 1075

原创 多线程死锁相关

首先推荐一篇博文 个人觉得这篇文章是把 “为什么会死锁”,及各个细节剖析的最清晰的一篇文章,强烈推荐,你要是 再看不懂 会把作者气死的,哈哈。 然后我自己总结了一下什么情况会发生死锁:串行队列Q中,往 Q 的任务一中插入同步任务二 上代码:- (void) doSth{ NSLog(@"0------%@",[NSThread currentThread]);

2017-10-20 18:04:28 307

原创 修改控件约束优先级,崩溃报错:You passed priority 1000 and the existing priority was 750.

最近项目迭代,针对特定商品做双11的活动,实现商品参加活动时,价格_priceLabel前面展示活动图标_activityIcon,商品不参加活动时,隐藏_activityIcon,_priceLabel与商品名称左对齐。如图: 要实现这个功能,需要在 xib 里给_priceLabel设置两个关键的约束: Price Label Leading Name Label Contra

2017-10-18 11:10:39 976 1

原创 写一个单例

写一个单例吧,记性不好,还是烂笔头好使。 比如单例类名叫Singleton.m 文件#import "Singleton.h"static Singleton* singleton = nil;@interface Singleton()<NSCopying,NSMutableCopying>@end@implementation Singleton//单例方法+ (Singleton

2017-10-12 16:39:54 306

原创 dispatch_barrier_async和dispatch_barrier_sync

dispatch_barrier_async和dispatch_barrier_sync是 GCD 中的两个方法。是不是和dispatch_async及dispatch_sync长得很像,就是多了一个barrier(译:栅栏)。 没错,除了有dispatch_async或dispatch_sync的作用外(是否阻塞当前线程),还有“栅栏”的效果。 意思就是,以他们为界,待前面任务执行完成,再把自

2017-09-01 18:48:31 629

转载 好文-Class

iOS Class结构分析 为什么 object_getClass(obj) 与 [OBJ class] 返回的指针不同

2017-08-30 15:43:54 256

原创 xcode8 coredata 创建 NSManagedObject Subclass 后生成四个文件,运行报错。

xcode8 coredata 创建 NSManagedObject Subclass 后,生成四个文件,如下图:运行出错: duplicate symbol OBJC_CLASS$_Student in: /Users/bentudou/Library/Developer/Xcode/DerivedData/WorkSths-euluwhdcebmmukgypgabangnsbkb/B

2017-04-26 17:42:58 2422

原创 xcode 下创建文件夹,并在文件夹下创建文件时没有弹出选择界面,直接生成了一个 file

新买的笔记本,安装了 xcode,开始使用。 show 创建文件夹,并在文件夹下创建文件时没有弹出选择界面,直接生成了一个 file,如下图: 出现这种情况的原因是因为,add file to 时,选择了 create folder references,而不是 creat groups。下面是操作过程 这里点击add,就直接加入了,不会出来选择 create groups 的面板,点击

2017-04-25 13:47:19 1646

原创 实现类似百度地图-添加到主屏幕的功能

领导昨天拿着手机过来演示了一个功能,打开百度地图 app,搜索路线,下面有一个收藏按钮,点击收藏后会提示是否需要添加到主屏幕。研究了一下,共有两种实现方式,都做了。 有一个很不错的博客,可以看一下。如博客中说的,没有复杂的业务逻辑,主要是读取HTML文件、替换HTML文件中相应字段、存储HTML文件到HTTPServer的WebPath下,再通过Safar打开本地服务。其中跳转到 app对应页面

2017-04-07 18:41:18 1481

Mehod Swizzling实现页面统计功能

runtime黑魔法 Mehod Swizzling 实现页面统计

2017-02-20

UIViewController+Swizzling 实现页面统计

Mehod Swizzling 实现页面统计

2017-02-20

空空如也

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

TA关注的人

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