iOS
金鱼女士
做过 iOS开发 (OC/swift/flutter),目前在写前端 (react/vue/Taro/微信小程序 )
展开
-
iOS-透明的 webView
原生 app 上放置一张撑满屏幕的图片,创建一个 webView 盖在图片上。要实现 webView 是透明的效果需要。原创 2023-06-06 15:38:14 · 827 阅读 · 0 评论 -
iOS OC 实现 swift defer 效果
swift 中有个我很喜欢的用法:defer。效果是,当 defer 所在作用域将要结束时,系统会调用 defer 花括号里的内容。比如,请求接口时需要展示 loading,接口完成或者某些条件不满足下要移除 loading,这时可能需要在多处调用移除 loading,一是可读性不强,二是很有可能会忘记调用移除 loading 代码。这时,defer 就派上用场了。func requestData() { defer { hideLoading() } showLoading() ....原创 2022-01-19 18:10:03 · 2434 阅读 · 0 评论 -
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 · 597 阅读 · 0 评论 -
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 · 3889 阅读 · 0 评论 -
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 · 2687 阅读 · 0 评论 -
Future-怎么停止一个未开始执行的延时任务
执行一个延时任务,一般会用Future.delayed,比如延时0.5s播放一个音频文件Future.delayed(Duration(milliseconds: 500), () { playAudio(url);});现在有一个需求:点击<下一步>按钮时停止播放。0.5s后执行任务,音频播放的过程中停止播放:audioPlayer.stop();0.5s前点击了<下一步>按钮,需要停掉还未执行的任务,...原创 2020-07-16 18:53:33 · 1058 阅读 · 0 评论 -
从微信跳转第三方app:在微信打开h5页面后,点击触发跳转自己app指定页面
今天,朋友发来一条拼多多砍价消息,点击链接跳转到下面的H5页面,点击允许,跳转到拼多多的App Store页面,到这都很正常对吧,神奇的是点击打开后跳转到了指定的页面,不只是简单的打开app想了下他是怎么实现从App Store跳转到app后打开指定页面的,猜测可能用到了粘贴板的功能,先把一个有规则的字符串存到粘贴板,打开app的时候检测剪贴板,如果是符合规则就解析并跳转实际测试后验证了这个猜想。点击“允许”后,随便找个输入框,粘贴后发现就是开头讲的H5链接里的一个字符串。感觉这真的是一个很好的原创 2020-06-17 17:24:44 · 8196 阅读 · 1 评论 -
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 · 586 阅读 · 0 评论 -
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 · 2739 阅读 · 0 评论 -
执行到reloadData()方法会立刻返回,不会等到刷新完成才返回
UITableView和UICollectionView都有reloadData方法。如题,可以理解为reloadData()方法是一个异步的方法,非同步执行完成其内部的代码。执行到collectionView.reloadData()就立刻返回,此时collectionView还未真的刷新完成。比如有一个需求是,数据源list新增几条数据,刷新collectionView后立刻更新collect...原创 2018-02-28 17:33:44 · 1887 阅读 · 0 评论 -
多线程死锁相关
首先推荐一篇博文 个人觉得这篇文章是把 “为什么会死锁”,及各个细节剖析的最清晰的一篇文章,强烈推荐,你要是 再看不懂 会把作者气死的,哈哈。 然后我自己总结了一下什么情况会发生死锁:串行队列Q中,往 Q 的任务一中插入同步任务二 上代码:- (void) doSth{ NSLog(@"0------%@",[NSThread currentThread]);原创 2017-10-20 18:04:28 · 342 阅读 · 0 评论 -
写一个单例
写一个单例吧,记性不好,还是烂笔头好使。 比如单例类名叫Singleton.m 文件#import "Singleton.h"static Singleton* singleton = nil;@interface Singleton()<NSCopying,NSMutableCopying>@end@implementation Singleton//单例方法+ (Singleton原创 2017-10-12 16:39:54 · 336 阅读 · 0 评论 -
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 · 1124 阅读 · 0 评论 -
应用更新跳转 AppStore,千万别一不小心跳到 itune,因为 itune 里的 app 没有更新按钮
最近的项目有一版加了强制更新功能,当然了众所周知苹果拒绝任何带有版本更新的提示出现在页面中,就是说不让你有提示更新的功能。上有政策下有对策,应该很多人都知道可以通过后台接口控制版本更新。服务器端存储一个版本号,可以通过接口获取,如果接口获取到的版本号比本地 app version高就提示更新,否则不提示。每次提交审核时保证后台版本号比 app version 低,等审核通过后再修改成AppStore原创 2017-01-05 13:55:17 · 4055 阅读 · 0 评论 -
修改控件约束优先级,崩溃报错: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 · 1067 阅读 · 1 评论 -
关于hit-testing机制
关于hit-testing机制当我们点击屏幕上某个点的时候, IOS会检查到手指触摸操作(Touch),并生产一个UITouch对象,将其打包成一个UIEvent对象。然后将其放入当前活动的Application的 事件对列 , UIApplication会从 事件对列 中按照对列的顺序,通常先分发给应用程序主窗口,主窗口会调用hitTest:withEvent:方法(假设称为方法A,注意这是UIV原创 2016-07-27 18:32:59 · 586 阅读 · 0 评论 -
点击页面卡住不动,有可能导航栏 title 变化了,但页面没更新,关于左滑手势
最近发现一个问题,在首页有一些操作是要跳转到一个新页面 bVC,但是看到状态栏左上方的小菊花也转圈了,就是页面不跳转,卡住不动了,或者导航栏更新成了bVC,但是 view 没变化。按下 home 键回到桌面,再次点击启动 app,页面显示的是本该跳转的新页面,显然跳转了,但是 UI 没有刷新。再次操作还是一样的效果,双击 home 键划掉 app才恢复正常。很郁闷,不知道怎么回事。在首页如上操作后(原创 2016-10-18 15:49:56 · 1039 阅读 · 0 评论 -
searchbar 未输入时,或有 placeholder 时也能点击搜索,支持空搜索
//searchbar 未输入时,或有 placeholder 时也能点击搜索- (void)searchBarTextDidBeginEditing:(UISearchBar *) searchBar{ UITextField *searchBarTextField = nil; NSArray *views = ([[[UIDevice currentDevice] syste转载 2016-10-20 10:19:07 · 615 阅读 · 0 评论 -
iOS native 调用 js 方法
如果需要在一个H5页面做分享功能,需要分享 title,description,url,image, 可以通过下面的方法做。 前段写一个方法,该方法会返回一个字符串字典,字典里是我们需要的 key-value,iOS端在 webview 加载完时调用 js 方法 //下面是 js 方法 function iosShare(){ return '{"imgUrl":"'原创 2017-01-05 14:14:51 · 1174 阅读 · 0 评论 -
js 与 native 交互时有时候不能触发shouldStartLoadWithRequest方法
UIWebView这个控件与 H5联调时一般通过这个代理方法:也就是 H5上有页面链接跳转时会回调该方法,在这个方法内可以截取到即将跳转这个动作携带的链接。 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigat原创 2016-09-09 16:28:22 · 1556 阅读 · 0 评论 -
runtime心得
近日看了一些 runtime 的资料,结合之前对 runtime 的认识,理解又深了一些。runtime 的使用网上资料很多,不再赘述,此处只分享一些比较难理解的点。 一:成员变量包括实例变量和类变量,因为 iOS中无真正的类变量,所以,成员变量都是(就是)实例变量。首先我想大家先搞懂一些基础知识,因为看 runtime 博客的时候会经常看到实例变量和成员变量,如果不清楚两者的关系,有可能会搞混淆原创 2017-02-15 19:26:11 · 360 阅读 · 0 评论 -
Mac 10.12系统更新后 cocopods setUp 报错的问题
Mac 10.12系统更新后 cocopods需要重新更新,按照教程走下来到 setUp这步,一直报错的问题。1.Uninstall CocoaPods (choose to uninstall all versions): sudo gem uninstall cocoapods2.Remove old master repo: sudo rm -fr ~/.cocoapods/r原创 2016-10-18 17:20:36 · 544 阅读 · 0 评论 -
实现类似百度地图-添加到主屏幕的功能
领导昨天拿着手机过来演示了一个功能,打开百度地图 app,搜索路线,下面有一个收藏按钮,点击收藏后会提示是否需要添加到主屏幕。研究了一下,共有两种实现方式,都做了。 有一个很不错的博客,可以看一下。如博客中说的,没有复杂的业务逻辑,主要是读取HTML文件、替换HTML文件中相应字段、存储HTML文件到HTTPServer的WebPath下,再通过Safar打开本地服务。其中跳转到 app对应页面原创 2017-04-07 18:41:18 · 1534 阅读 · 0 评论 -
过滤器NSPredicate的Coredata 子查询 SUBQUERY
最近在看数据存储 Coredata 的内容,关于 coredata 不多叙述,网上挺多资料可以学习,不有一篇个人比较喜欢的博客链接,有兴趣的可以看一看,简洁明了,通俗易懂,很有自己的立场。 例子就照上面链接里的类。 有一个 Student 类,有属性 courses(修的课程,一对多,是一个集合NSSet ), age,name… 现在有一个需求:要求筛选出所有选修了大学物理的学生。 N原创 2017-03-22 17:28:07 · 1378 阅读 · 0 评论 -
xcode 下创建文件夹,并在文件夹下创建文件时没有弹出选择界面,直接生成了一个 file
新买的笔记本,安装了 xcode,开始使用。 show 创建文件夹,并在文件夹下创建文件时没有弹出选择界面,直接生成了一个 file,如下图: 出现这种情况的原因是因为,add file to 时,选择了 create folder references,而不是 creat groups。下面是操作过程 这里点击add,就直接加入了,不会出来选择 create groups 的面板,点击原创 2017-04-25 13:47:19 · 1706 阅读 · 0 评论 -
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 · 2479 阅读 · 0 评论 -
好文-Class
iOS Class结构分析 为什么 object_getClass(obj) 与 [OBJ class] 返回的指针不同转载 2017-08-30 15:43:54 · 286 阅读 · 0 评论 -
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 · 698 阅读 · 0 评论 -
UIKit性能调优实战讲解
转载自:http://www.jianshu.com/p/619cf14640f3在使用UIKit的过程中,性能优化是永恒的话题。很多人都看过分析优化滑动性能的文章,但其中不少文章只介绍了优化方法却对背后的原理避而不谈,或者是晦涩难懂而且读者缺乏实践体验的机会。不妨思考一下下面的问题自己是否有一个清晰的认识:为什么要把控件尽量设置成不透明的,如果是透明的会有什么影响,如何检测这种影响?为什么cel转载 2016-08-25 16:22:32 · 427 阅读 · 0 评论