iOS
文章平均质量分 70
海洋顶端
这个作者很懒,什么都没留下…
展开
-
RAC中Multicast的实现原理分析
内部是利用RACSubject在中间转发消息,RACSubject(`_signal`)订阅真正的Signal(`sourceSignal`),外部Subscribers订阅RACSubject(`_signal`)原创 2016-08-27 16:08:30 · 1550 阅读 · 0 评论 -
TesseractOCR-iOS 无法找到 traineddata 文件问题 & Xcode Group 与 Folder Reference 的区别
TesseractOCR-iOS 无法找到 traineddata 文件问题 & Xcode Group 与 Folder Reference 的区别最近在玩儿 OCR,运行 APP 的时候遇到了一个找不到资源文件的问题,导致无法识别。Google 了一下,把资源文件的引入方式从 Group 改成 Folder Reference,问题就解决了。但是不知道为什么呢,就继续查了一些资料。...原创 2018-06-03 17:20:45 · 817 阅读 · 0 评论 -
当我们在设置 Other Linker Flags -lstdc++时,我们到底在设置什么?
问题 最近在玩儿 OCR ,使用了开源的 OCR 引擎 — TesseractOCR。编译遇到了如下问题: 搜索到两个解决方案,测试之后都是奏效。一是在 Other Linker Flags 中新增标志 -lstdc++,二是在 Linked Framework and Libraries 中 add libstdc++.tbd.原理 这是个混编问题。Tess...原创 2018-06-03 18:34:45 · 1659 阅读 · 0 评论 -
Archive Invalid Bitcode Signature 错误不能通过设置 Release Build Active Architecture Only 为 YES 来解决
Archive Invalid Bitcode Signature 错误不能通过设置 Release Build Active Architecture Only 为 YES 来解决 今天在项目中遇到了这个问题。这也不是第一次遇到了。之前使用的解决方案都没能奏效,包括 Clean、Delete Derived Data、重启 Xcode 以及检查是不是有别的错误提示。后来,尝试设置 Re...原创 2018-06-09 17:45:48 · 1686 阅读 · 0 评论 -
CocoaPods到底做了什么
CocoaPods到底做了什么 CocoaPods 到底做了什么,还是需要了解一下,否则构建出了问题,根本无从下手解决。查了一些文档,创建了 Demo ,用 Git 看 CocoaPods 到底新增、修改了哪些文件,总结一下。 首先 CocoaPods 设计出来是要解决两个问题,一是 library 的管理问题,二是 library 的发现问题,是标志的依赖管理工具,可以让我们...原创 2018-06-17 19:42:09 · 755 阅读 · 0 评论 -
iOS 实现音频流播放器中踩的内存管理相关的坑
App 作为工具应用,具备语音提醒的能力。语音是调用云服务进行合成的,这样做灵活些,新增提醒不用准备相应的语音文件。云服务合成音频,以流的方式返回到端上,端上使用 Audio Queue 播放。流式播放,可以抽象为生产者-消费者问题。云是我们的生产者,麦克风是我们的消费者。Audio Queue 已经把问题解决一半了,它创建了 Buffer,提供钩子告诉我们Buffer可用,提供接口让我们...原创 2018-07-25 17:14:38 · 603 阅读 · 0 评论 -
objective-c non-fragile ivars 学习笔记
最近想要对我维护的 App 做启动优化,观看了这两个视频,Optimizing App Startup Time、iOS App Performance: Responsiveness。视频干货满满,涉及到了 iOS 可执行文件的结构、系统是如何启动 App 的等等底层知识,需要慢慢消化。针对其中的一个点,non-fragile ivars offset update ,这个启动流程中的一...原创 2018-07-15 10:50:54 · 605 阅读 · 0 评论 -
Mach-O Executable 文件结构
看这篇文章,获益匪浅,解答了我一直以来的关于我的代码最终是如何在机器跑起来的疑惑,总结一下。 首先,一个可执行文件,.out 文件,内部会分为多个 Segment,比如:__TEXT: 放的是机器码,是 CPU 可以理解、执行的指令__DATA: 放的是数据__PAGEZERO: 一个坑位,会在 VM 当中占 4GB 的, 当我们运行一个应用的时候,VM (...原创 2018-06-30 18:35:50 · 464 阅读 · 0 评论 -
iOS 内存
观看 Fixing Memory Issues、App Startup Time: Past, Present, and Future 两个视频的总结。一、Virtual Memory VS Physical Memory Virtual Memory 是开发者视角的 memory,会分多个 region(code region、heap region(maybe))),re...原创 2018-07-21 12:05:31 · 355 阅读 · 0 评论 -
Objective-C 消息机制学习总结
message 机制可以说是 objc 最重要的特征,没有之一。零零散散看了 method cache、method search 以及 message forward,串一串,总结一下。 message 机制带来很大的灵活性,调用和实现完全解耦,实现上也力求高效,毕竟 send message 是非常频繁的操作。流程概括来说可以分为三步查 cache ,命中则返回 imp,miss ...原创 2018-11-09 16:10:35 · 265 阅读 · 0 评论 -
Weak 指针源码学习
weak 指针,大家都不陌生。之前也简单学习了一下,总结了一下对象在回收时 weak 指针是如何被 nil 掉的。不过我对 weak 指针的一些方面还有一些疑问,所以去看了一下源码。我的疑问主要是:weak 指针使用时,会对所指对象进行 retain 吗,还是需要我们手动的去做这件事,如何保证指针使用期间所指对象不被 dealloc 的?为什么要用 hash set 存 weak 指...原创 2018-11-02 16:34:52 · 280 阅读 · 0 评论 -
扫描图像场景下平移手机的运动检测方法探索
最近的项目中,需要连续的扫描图像进行图像识别。(之所以是用扫的方式,而不是用拍的方式,是为了后面做自动化,扫其实是自动的拍,摄像头打开,视频流过来,我要有能力知道我要用哪一帧,而不是用户去拍)。扫描的过程中,我不可能把每一帧都识别一下,这个开销太高,而且也没有必要,很多帧是重复。所以,我需要采样策略,我的采样策略是先判断手机是否在运动,后面再判断图像质量,因为图像分析有一定开销,轻量的漏斗放前面,...原创 2018-05-14 21:42:03 · 643 阅读 · 0 评论 -
‘BAD_ACCESS‘ 错误解决记录,一个与 ‘__bridge‘ 有关,一个与 ‘out parameter‘ 有关
EXC_BAD_ACCESS(code=EXC_I386_GPFLT) __bridge out parameterNSError **原创 2017-08-06 13:52:55 · 748 阅读 · 0 评论 -
Block的内存管理以及变量Capture
总的来说,Block = 匿名函数 + Capture变量。它的用途包括:作为匿名函数使用,即把函数定义在使用到的地方,逻辑更加集中。Capture变量,可以capture Block定义所在的作用域内的变量,类似于保存上下文,Block在别处被调用时,好像具备Block定义所在的上下文一样可以正常执行,这些都是OC做的事情。原创 2017-05-07 13:53:15 · 546 阅读 · 0 评论 -
从源码角度分析RACObserve的实现原理(一)
RACObserve原创 2016-08-21 17:07:47 · 3716 阅读 · 0 评论 -
对象回收时 Weak 指针自动被置为 nil 是如何实现的
Weak表Runtime维护了一个Weak表,用于存储指向某个对象的所有Weak指针。Weak表其实是一个哈希表,Key是所指对象的地址,Value是Weak指针的地址(这个地址的值是所指对象的地址)的数组。原创 2016-08-24 14:27:02 · 4985 阅读 · 2 评论 -
IOS7.0系统上,特定颜色调用`- getRed:green:blue:alpha:`方法返回结果有误的问题
在7.0系统上对[UIColor whiteColor]调用这个API,获取R、G、B值是错误的,均为接近0的小数,正确的结果是1。原创 2016-08-24 19:09:04 · 1043 阅读 · 0 评论 -
UIButton使用RACCommand后setEnable方法失效的问题
真正的问题是RACCommand内部调用setEnable方法,可能会覆盖你手动设置的UIButton状态。无论你在初始化RACommand时是否传入enabledSignal,RACCommand内部都会控制UIButton的enable/disable状态。我们在外部也调用setEnable方法设置enable状态,可能会冲突。原创 2016-08-25 15:30:44 · 2673 阅读 · 0 评论 -
MJRefresh中异步更改UI为Refreshing状态导致内部状态和UI状态不一致的问题
在MJRefreshHeader类setState方法中“更改UI为refreshing状态”的操作是异步的。也就是说,设置Refreshing状态时,设置内部状态和设置UI状态被分离开了,如果在中间插入了设置内部状态(比如Idle)的操作可能会导致内部状态和UI状态不一致的问题。另外,MJRefreshendRefreshing方法中“设置状态为Idle”操作是异步的。原创 2016-09-20 11:26:56 · 3451 阅读 · 1 评论 -
改进RACCommand──一句话完成工作信号的创建、Next/Error事件的订阅,并保证互斥执行
前言本文将会介绍RACCommand进行异步操作(比如网络请求)的用法,分析其中存在的问题。然后介绍改进方案STButtonSignal的用法,给出STButtonSignal的原理以及具体实现。原创 2017-03-20 15:06:52 · 2732 阅读 · 0 评论 -
RAC扩展──异步filter、map
RAC有非常丰富的Operation,可以让我们的开发事半功倍。常用的比如:filter、map。但是原生的filter、map要求我们在Block同步返回结果。但是,有的时候,我们只能异步返回结果。比如我们需要根据用户的输入进行filter(二次确认);比如我们需要先请求网络才能进行map。所以,我对原有的Operation进行了扩展,开发了asyncFilter、asyncMap。原创 2017-03-14 20:15:05 · 1698 阅读 · 0 评论 -
函数响应式编程(FRP)思想
ReactiveCocoa是IOS广为使用的技术框架,而ReactiveCocoa的核心思想就FRP。FRP不同于JAVA的object-oriented和AOP,FRP能让你的代码像数学一样简洁,业务像流水一样清晰流畅。函数响应式编程响应式编程思想为体,函数式编程思想为用。原创 2017-03-14 20:24:55 · 7136 阅读 · 3 评论 -
Run loop简析
前言以前是Android开发,接触过Android里面的Looper、Handler、MessageQueue这些概念,尝试类比着来理解Run Loop。二、为了解决什么问题一句话总结,为了调度任务。 具体来说可以在特定时间点执行某个任务(延后某个任务的执行)可以在特定线程上执行某个任务(将某个任务分发到特定线程上去执行)原创 2017-04-22 15:46:42 · 321 阅读 · 0 评论 -
autorelease的使用场景
autorelease是解决函数返回值引用计数问题的一种方式。考虑这样一个场景,我们有个方法返回一个对象,在方法内部我们retain了这个对象,这意味这我们需要release这个对象,维持对象引用计数的平衡。但是因为这个对象是返回值,我们要确保调用方拿到的对象是没被回收的,在函数返回前release存在导致对象被回收的风险。也就是说,我们需要release返回值,但又不能在函数返回前。原创 2017-05-07 13:50:22 · 1523 阅读 · 0 评论 -
Xcode 利用 Target 机制定制构建过程的一次尝试
标题太拗口了。事情是这样的,之前对 Target 有所了解,可是没有自己运用过,刚巧有个事情,我觉得可以借助 Target 机制,就动手实践了一下,今天总结一下。这个事情是我们有个库不支持 x86 平台,导致我们的 app 不能用模拟器调试。用这个库是个非常边缘的业务,所以采取方案是自定义一个 Target,构建出没有这块业务和这个库的产物用,然后用模拟器调试。(用两个分支显然不如用两个 ...原创 2019-05-07 21:43:02 · 204 阅读 · 0 评论