- 博客(27)
- 收藏
- 关注
原创 RxSwift 介绍与简单使用
文章目录一、 Rx 介绍1、什么是Rx2、RxSwift3、RxCocoa二、Rx 常见用法1、给 button 添加点击事件(RxCocoa)2、事件 + bind + combine3、遵循代理并实现4、闭包回调5、通知6、多任务依赖关系管理7、多任务异步并行三、DisposeBag(清除包)介绍:四、函数式编程介绍参考文献:一、 Rx 介绍1、什么是RxRx 是 ReactiveX 的缩写,简单来说就是基于异步 Event 序列的响应式编程。Rx 可以简化异步编程方法,并提供更优雅的数据绑定,让
2020-07-13 22:51:25
2140
原创 centOS 手动部署 wekan
wekan,作为一个GitHub star 达到16k+ 的看板工具,个人感觉是非常的好用的,兴趣来潮,推广到了整个客户端团队,然后是部署的事情了。目前实现过的部署方案有两种,基于 docker 的自动部署和手动部署,本篇文章主要介绍手动部署一、下载安装MongoDB点击进入MongoDB的下载页面,选择 Linux 版本,下载最新稳定版本MongoDB;解压,修改文件名为mongodb,移动至/urs/local目录下;cd到根目录,vim .bashrc,输入:export="/home/a
2020-06-09 16:11:34
1244
原创 Xcode优化编译时间
一、如何查看编译时间终端执行下面命令defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES编译时,Xcode编译进度条走完后,会展示编译时间二、可优化点build setting中 Optimization Level 设置优化配置项含义None编译器不执行优化,不改善代码性能,编译耗时较少Fast编译器执行简单的优化来提高代码性能,相对增加编译耗时Faster编译器执行所有优化,
2020-05-16 19:25:49
1559
原创 XKRouter简介
XKRouter XKRouter是一款基于URL标准的、用于iOS系统的路由跳转策略。设计XKRouter最大的目的就是希望以后所有的页面跳转可以随心所欲的控制,不再受限于层级、状态、跳转方式、动画效果。当然了,这是一个美好的想法。所有美好的建筑,都是一砖一瓦积累出来的,一步一步走,一点一点实现,让它...
2019-06-24 08:55:16
570
原创 使用UITableViewAction自定义UITableView左滑样式(iOS8及以后可用)
首先,举个栗子:微信会话列表,左滑某个会话cell,会有“标为未读”、“删除”两个选项。在我们的日常开发中,也经常会遇到这样的需求,网上也有很多大神写了相关的三方库,但在很多情况下,开发人员只需要这些三方库的一小部分功能,却要引入整个三方库,增大项目体积。这里,给大家提供一种系统自带的简单实现方案。一、左滑仅需要展示单个按钮左滑后仅需要展示单个按钮,这是一种很简单、试用场景很多的需求,实现...
2019-02-27 15:20:51
401
原创 git 基础使用(入门级)
一、建立仓库1、远端已有仓库如远端已有代码仓库,只需将仓库clone到本地即可。打开终端,cd到你想放置代码仓库的位置,执行以下命令git clone [url] // url为仓库地址命令执行完成后,远端的代码仓库就已经clone到你本地了2、建立代码仓库如目前需要对某个项目开始使用git进行管理,可通过以下方式操作:打开终端,cd到该项目的目录下,执行:gi...
2019-02-19 15:52:16
181
原创 iOS 启动图国际化
如果APP是支持多语言的,那么图片国际化必不可少,普通资源的国际化不在此做赘述了,主要说一下启动图的国际化以及实现过程中遇到的坑。1、使用launchImage的国际化方法苹果提供了一个info.plist设置的key叫做UILaunchImages,顺利实现启动图国际化。UILaunchImages是一个数组,每个对象对应了一个启动图,每个启动图有四个键需要设置,分别为名字、最低版本、大...
2019-01-25 15:48:37
2548
1
原创 iOS framework如何支持bitcode以及bitcode检测
1、检测APP、静态库、framework是否支持bitcode(1)静态库:打开终端,输入一下指令,xxx.a代表你的静态库路径otool -arch armv7 -l xxx.a | grep __bitcode | wc -l如果输出的数字不为0,就代表包含bitcode(2)APP、framework:framework和APP,只要传递对应的二进制文件即可。由于A...
2019-01-25 15:08:00
3367
2
原创 iOS VIPER架构简析
在建筑学领域,有这样一句话:我们虽然在营造建筑,但建筑也在重新塑造我们。作为一名开发人员,如果你曾认真的去做过架构相关的东西,对这句话必然有着深刻体会。一个好的架构,不仅可以让一款产品成功的投入使用,还可以让产品具有良好的可维护性、可扩展性。这篇文章,主要介绍一种被称为VIPER的架构,并基于swift的特性去做相应的设计。VIPER是视图(View)、交互器(Interactor)、展示器(...
2019-01-23 17:18:48
2499
原创 App Store 4.3 大礼包被拒 ,马甲包制作方案
马甲包制作方案基本原则:不阉割功能,顺利上架为确保上架成功,马甲包需进行差异化处理,可从以下几个维度进行操作:1、界面差异化: (1)全套UI风格替换; (2)不影响功能前提下,部分界面布局微调,尤其是一级界面;2、文件差异化: (1)除三方库以外,修改所有文件的命名,使用一定的命名规则; (2)添加无用垃圾文件,加大文件差异化;3、代码差异化: (1)以一...
2018-10-16 11:02:41
1885
1
原创 Xcode10打包发布App Store,iOS9崩溃
最近更新了Xcode10和macOS10.14,想着可以在暗黑模式下尽情潇洒。然而,在用Xcode10打包提交一个版本之后,线上崩溃接踵而至。这就很尴尬了,发布前,不管是开发自测还是测试同学的调试,都没有问题,一上线就各种问题。查看了bugtags上的反馈情况,发现崩溃基本集中在iOS9系统上,Google了一波,大神们说,是Xcode10的毛病。具体情况是这样的:bug复现条件:1、A...
2018-10-16 10:15:57
2319
1
原创 Git使用之代码衍合
工具:Git目的:能够跨分支,跨版本进行代码合并主要命令:cherry-pick,rebase 注意:1,合并时,可能出现冲突,务必优先解决冲突;2,多个提交合并时,可能出现文件丢失,代码丢失情况,请务必仔细观察编译时系统提示的错误和警告;3,冲突和错误没有解决的情况下,不得提交代码到gitlab;4,根据实际场景,cherry-pick与rebase命令配合使用;...
2018-08-28 15:56:23
807
原创 iOS 11及iPhone X适配
最近公司要做iOS11和iPhone X的适配工作,上网百度了很多,自己也做了相应的测试和实现,目前做出如下总结,希望广大猿媛们能够互相借鉴,多提意见:一、iPhone X适配:1、状态栏:在iPhone X上,状态栏高为44pt,对于之前自定制状态栏导航栏的同学来说,这无疑是一个噩耗,又又又要改了,和其他机型还要保持兼容,目前主流的做法是判断机型,如果是iPhone X,就使用44p
2017-11-06 16:24:36
602
原创 Xcode 诡异报错xcdatamodel: cdtool cannot compile 和 dyld: Symbol not found: ___NSDictionary0__
1..xcdatamodel: cdtool cannot compileCoreData报错,网上可以搜到很多类似错误的解决方案,但都不能解决我的问题,最终我把Xcode卸载重新安装,就好了。(PS:可能是安装的xcode是从开发者网站上下载,然后替换本地xcode,导致xcode有问题)2.dyld: Symbol not found: ___NSDictionary0__ Ref
2017-08-22 14:06:53
1101
原创 iOS 静态库使用的配置 -ObjC
1、如果静态库中有category,那么需要添加 -ObjC 参数标识,否则可能会报:unrecognized selector sent to instance2、参数说明(引用自:http://www.cnblogs.com/robinkey/archive/2013/05/27/3101095.html)-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C
2017-08-22 14:04:22
419
原创 cocoapods创建共有库过程中遇到的坑以及版本删除
前面一篇文章介绍了怎么创建共有库,这篇文章主要介绍,创建过程中遇到的坑和相应的解决方法1、在pod spec lint 检测podspec文件的时候出现以下问题: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation. Simulator 这个问题一般出现在安装了
2017-07-14 10:33:01
1000
1
原创 cocoapods创建自己的共有库
一、前期准备:1、安装cocoapods;(注:http://www.jianshu.com/p/b64b4fd08d3c,这是cocoapods安装教程,网上有很多,就不写了,大家需要的自取吧)2、安装source tree或者自己在终端搭建git环境,建议使用source tree工具,非常方便;当然了,使用终端的话,体验上更爽;3、github上注册一个账号。二、github
2017-07-14 09:32:10
422
原创 UIWebView加载网页内存占用过高
在使用UIWebView去加载网页的时候,注意过的同学都会发现,内存占用瞬间暴增,并且在页面dealloc之后,内存仍未释放,导致app占用内存过大。查阅资料,发现是因为HTML里的js导致了内存泄漏,每次打开一个链接就会把“WebKitCacheModelPreferenceKey”设置为1。以下是个人尝试过的解决方案:1、如果工程需要兼容到iOS8.0之前,webview遵循代理,并在代理
2017-07-05 14:50:14
1254
原创 NSRunLoop相关
1、NSRunLoop是iOS消息机制的处理模式,它的主要作用是控制NSRunLoop中线程的执行和休眠,在需要的时候使当前NSRunLoop控制的线程工作,不需要的时候则让当前NSRunLoop中控制的线程休眠。2、从原理上来说,NSRunLoop一直处于循环检测的状态,从线程的start到线程的end,检测inputsource同步事件,检测time source同步事件,检测到输入源则就
2017-07-04 15:42:06
246
原创 iOS之懒加载技术
在iOS开发过程中,经常会用到懒加载技术,比如我们存放网络数据的数组,自定义的控件,复杂的运算逻辑等等情况下都会用到懒加载技术。下面介绍一下什么是懒加载懒加载:1、也被成为延迟加载,主要的特点是:用到时再加载,不用不加载,可以提高性能节约支出;2、加载过之后就不会再次加载,节约了系统资源;3、对于实际开发中可能会遇到的一些顺序问题,懒加载可以作为一个很好的解决方案。懒加
2017-06-29 14:34:56
347
原创 NSTimer使用:暂停、继续、释放、解除循环引用
NSTimer的使用方法:1、初始化:+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;+ (NSTimer *)scheduledTimerWithT
2017-06-29 14:06:05
1298
1
原创 iOSAPP生命周期
一、应用程序状态iOS 应用程序有一下几种状态Not Running 未运行 应用程序尚未启动Inactive 未激活状态程序在前台运行,但未收到任何事件,此时应用程序会停留在未激活状态77Active 激活程序在前台运行且收到事件,这是在前台运行的正常模式;Background 后台程序在后台运行且拥有执行代码的能力,在未作
2017-04-18 10:33:32
458
原创 iOS手势冲突
手势冲突,在iOS开发过程中,这是一个很常见的问题。举个例子:在自定义一个相册的时候,就要用到大量的手势,左滑、右滑、捏合、拖动、长按等等;这些手势都需要加载到UIImageView上(UIImageView必须开启用户交互,设置userInteractionEnabled=YES,在iOS中UILabel、UIImageView的userInteractionEnabled默认都是NO,UIBu
2017-04-18 10:24:27
604
原创 左滑返回手势失效问题
最近面试了一个iOS程序媛,看了她的项目,其中一个项目中存在一个很大的问题,左滑返回手势全部失效了。看了一下,她是自定义了navigationBar的返回键,也做没做相应的处理,导致左滑返回失效了。在这里,说一下我的处理方式,有不合适的地方,希望大家能够指正一下。在自定义backButton之后, 加入下面这句代码,把手势的许可打开:self.navigationControl
2017-03-17 16:19:01
718
1
原创 block的循环引用,未能及时释放问题
近期在开发过程中,偶尔会发现工程里某个页面的通知(NSNotificationCenter)有时会被执行好几次(ps:在页面已经pop出栈之后继续执行,理论上出栈之后,页面应该被释放,通知在dealloc中也被移除)。通知的使用是在viewDidLoad方法里注册,在dealloc方法中移除。按理来说,在viewcontroller的生命周期里这两个方法都只会执行一次,是相对应的,所以不应该存在通
2017-03-16 17:59:59
427
原创 UILabel专题
UILabel是iOS开发中最常用最基础的控件之一,其父类为UIView。1、常用属性: // 初始化 UILabel 对象,并设置其在父视图上的位置 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 20)]; // 设置 UILabel 中的展示文字
2016-11-04 15:02:51
293
原创 iOS多线程开发:GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用(源自于百度知道)。GCD时基于C语言的,在使用的时候完全由系统来管理线程,不需要开发人员编写线程代码。
2016-03-05 11:28:28
434
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人