在iOS中,延迟操作的执行有很多种,但是如果要取消上一次延迟并继续本次延迟呢。
场景:输入内容,停止输入后延迟1秒执行其他操作,如果期间还继续输入,则重新计时。
more >>不忘初心,方得始终
在iOS开发中,有时候打开某个页面程序会出现内存激增的现象,这有可能是对象的内存没有得到及时释放,也或者是代码块占用内存较高造成的,但是当这个页面关闭后,内存会随着页面的生命周期一起释放。所以我们如何定位到造成内存激增的问题代码呢?
这种内存问题用Leaks是找不出来问题的,因为这些内存其实只是释放不及时,而不是没有释放
more >>在iOS的UI层,有大量的layout开头的方法,在这里总结一下。
这个方法,默认没有做任何事情,需要子类进行重写,常用在自定义视图里,比如自定义一个view。那么在什么时候调用呢?
实际操作中我们会发现,对于子线程来说,默认情况下它只会执行一次,执行完成后就会线程就为finished状态,只能销毁再创建。那我们想让该线程变为常驻线程,实时听从调度,该怎么做呢?很简单,用runloop即可。
iOS中runloop是和线程一一对应的,并且runloop是管理线程的,当线程的runloop被开启后,线程会在执行完任务后进入休眠状态,有了任务就会被唤醒去执行任务。默认情况下子线程的runloop是不会创建的,除非我们去调用它。
more >>我们知道,在oc里,因为oc具有运行时消息机制,所以可以使用runtime来进行一些黑魔法的操作。但是在swift里,因为swift本身是一门静态语音,所以是无法通过使用runtme机制来做一些操作的。先来看个例子:
more >>iOS开发中的多线程操作是开发的基本技术之一,iOS有四种多线程编程的技术,分别是:NSThread,Cocoa NSOperation,GCD(全称:Grand Central Dispatch), pthread。今天我们就重点讲一讲 GCD 中的并发,锁和线程同步。
GCD 队列默认就是串行的(serial),在 GCD 中创建并发队列是如下所示:
1 | let queue = DispatchQueue(label: "current", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.never, target: nil) |
你也可以直接创建:
1 | let queue = DispatchQueue.init(label: "concurrent", attributes: .concurrent) |
swift中的闭包是个比较重要的知识点,关于闭包的值捕获理解的总是有点乱,今天有点时间,就把他整理了一下。
先看一段oc代码
1 | NSInteger i = 1; |
当编译器走到第三行,也就是i+=1时候,实际上已经对i进行了拷贝,可以理解成
more >>项目中在集成推送的时候,总会希望我们在点击后台发来的推送内容的时候,跳入指定的界面。按照以前的开发习惯,总是每来一个需求,app里便接入一个对应的代码块,用来跳入对应的不同界面。那么能不能通过路由跳转的方式,app里代码不用更改,根据后台指定不同界面跳不同界面,甚至给对应界面传递需要的参数呢?
more >>最近无意中点自己app的时候,莫名其妙发现页面卡死不动了,但是项目还是正常跑着在,并没有什么异常。然后把app切到后台后再点开,又好了,不过在转场的时候就出现问题了,转场背景成了window的底色,还没动画。
之后反复弄了好几次,终于发现了问题所在,在UINavigationController
的根视图上,我还进行右滑操作(此时上级界面是没有VC的),页面就会卡死,手势冲突!!
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true