发布了文章2022-02-07
我们都知道,内存分配可以分为堆区(Heap)和栈区(Stack)。由于栈区内存是连续的,内存的分配和销毁是通过入栈和出栈操作进行的,速度远高于堆区。堆区存储高级数据类型,在数据初始化时,查找没有使用的内存,销毁时再从内存中清除,所以堆区的数据存储不一定是连...
发布了文章2021-07-28
卡顿主要表现为主线程卡死,不响应用户动作或者响应很慢,这种体验很差,会让用户对产品的认可度急速下滑,如果不及时优化,最终会导致用户流失。那么,哪些情况会导致主线程卡顿呢?大体有如下几个方面:很复杂的 UI 、图文混排的绘制量很大;主线程进行网络同步请...
发布了文章2021-06-23
1. 优化前 缺页中断耗时 (第一次安装)如果有, 请先删除 -fsanitize-coverage=func,trace-pc-guard 配置.删除app, 清除Xcode缓存 ;Xcode菜单栏 > Product > Profile (快捷键command+I) , 等待 running 完成; 出现 Instruments 界面, 选择System Trace ;启动项目...
赞了文章2020-11-26
移动端的跨平台技术不是一个新话题,早在几年前,WebView容器、React Native、Weex、Flutter、小程序等移动端跨平台框架就风起云涌。为什么跨平台这么有吸引力呢?我们设想一下如果可以做到一次开发,多端复用,那么对于公司来说,就可以降低用人成本。对于开发来说...
发布了文章2020-11-19
自定义的 KVO,支持多属性监听,支持自动释放。使用系统 KVO 监听属性 {代码...} 1、添加观察者 {代码...} 2、处理回调 {代码...} 3、手动移除观察者 {代码...} 系统 KVO 需要写一大堆代码,需要手动释放,需要我们自己判断监听是哪个属性,我们通过自定义 KVO 自动...
发布了文章2020-08-10
作为 iOSer,想必大家对 KVO 并不陌生,其原理概括起来大致3个步骤:创建派生子类 NSKVONotifying_Person修改被观察对象 p 的 isa 指针,使其指向新类 NSKVONotifying_Person重写 setter 方法,赋值并且通知观察者 observer 对象 p 的属性值发生了改变但是,系统的 K...
赞了文章2020-07-29
说到个人博客,我更倾心于GitHub Page方式的个人静态博客,虽然每次需要自己基于Markdown文档生成HTML页面,但是这种方式一是免费,二是可以完全自定义博客且木有广告链接,想用起来极为干净舒适!
回答了问题2020-07-28
原生键盘没有这个监听的吧,三方键盘看有没有暴露的API
赞了文章2020-07-28
Web 安全是互联网中不可或缺的一个领域,这个领域中诞生了大量的黑帽子与白帽子,他们都是安全领域的王者,在平时里,他们利用各种巧妙的技术互相博弈,时不时就会掀起一场 Web 安全浪潮,真可谓神仙打架,各显神通。
回答了问题2020-07-27
IE6已经没人用了
回答了问题2020-07-27
如图,所有元类的isa指针都指向 NSObject 的元类,NSObjct元类 的 superClass 指向NSObject 自身。题目中,category 分别将 +foo 和 -foo 添加到 NSObject元类 和 NSObject 类对象中,形成类方法与实例方法。[[NSObject new] foo] 在 NSObject 类对象中找到 -foo 并...
发布了文章2020-07-27
{代码...}
发布了文章2020-07-27
Apple开发者账号一般分为三类: l 个人账号 个人申请,仅限个人使用; 只能添加一个开发者; 最多添加100台测试苹果设备(UDID); 可以发布App Store; 费用一年$99; l 公司账号 以公司名义申请并使用; 可以添加多个开发者; 最多添加100台测试苹果设备(UDID);...
发布了文章2020-07-27
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。
发布了文章2020-07-27
info.plist 属性View controller-based status bar appearance, 也就是UIViewControllerBasedStatusBarAppearance, 官方文档说明如下:
发布了文章2020-07-27
ES6 之前判断字符串是否包含子串,用 indexOf 方法,ES6 新增了子串的识别方法。1、includes():返回布尔值,判断是否找到参数字符串。2、startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。3、endsWith():返回布尔值,判断参数字符串是否在原字符串...
发布了文章2020-07-27
2019/05/14 14:31 ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。 let 声明的变量只在 let 命令所在的代码块内有效。 const 声明一个只读的常量,一旦声明,常量的值就不能改变。 let 代码块内有效。 let 是在代码块内有效,var 是在全局范围内...
发布了文章2020-07-27
博客搬家,2018在父视图中修改1、使用 backBarButtonItem 实现,返回按钮紧贴屏幕左边,有返回手势。这种方法需要将图片设置成 UIImageRenderingModeAlwaysOriginal 模式才能正确显示,否则图片会被渲染成蓝色。 {代码...} 2、使用 leftBarButtonItem 实现,返回按钮...
发布了文章2020-07-27
博客搬家自定义导航栏,支持手势 {代码...}
发布了文章2020-07-27
loadView方法负责创建UIViewController的view,每次访问UIViewController的view,比如controller.view、self.view,且view为nil,就会调用loadView方法。