弹出相册是H5和原生很常见的交互,并且H5的实现也非常简单, 正常情况下是没有问题的,但是如果webview添加到不合适的view,并且iOS系统版本在iOS13.0以上,就无法弹出. 下面就详细复现一下这个例子.
GFWList规则简单说明
gfwlist规则解读。
Go学习总结
由于公司的业务需要,我跟着公司的大神学习了Go语言,Go高并发性能使其慢慢变成了服务端开发的主流语言,在做Go开发的过程中我也深深被其强大所吸引。下面主要介绍一下我学习的重点。
自定义终端命令以及常用快捷键
有一些终端命令我们使用的很频繁,但是每次都要用手敲一遍十分麻烦,我们可以自定义一些命令的快捷方式,例如git branch
我们可以设置快捷方式为git b
,这样就简化了不少。具体的自定义终端快捷命令的方式如下:
iOS Device Types(设备型号:iPhone Model)对照表
在开发过程中,我们无法通过代码去获取设备的名称, 例如 iPhone 12 mini
我们只能多去到对应的设备类型为:iPhone13,1
,所以我们经常需要做一些转换操作,下面是设备名称和设备类型的对照表. 需要注意的是,在使用模拟器的时候我们无法获取到准确的设备名称,所以我们在使用设备名称作为判断条件的时候最好是能配合模拟器和真机的宏TARGET_IPHONE_SIMULATOR
和TARGET_OS_IPHONE
使用.例如
iOS保活方案研究
iOS的后台都是假后台,但是这个假后台也不是纯粹的假后台,这是iOS的系统特征。iOS的保活也由于系统的限制是一个十分棘手的问题。并且也没有完美的实现方式,并且随着iOS系统版本的提升,越来越难做了。
OC中的三种定时器
OC中的定时器实现方式常见的有三种方式:NSTimer
,CADisplayLink
,GCD
,根据其实现方式的差异,他们存在着很大的差异,详情请看下文。
Tagged Pointer
在调试程序或者反编译App时,经常可以看到”NSTaggedPointerString”这个东西,经过查阅发现从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber
、NSDate
、NSString
等小对象存储,在没有使用Tagged Pointer
之前,NSNumber
等对象需要动态分配内存、维护引用计数等,NSNumber
指针存储的是堆中NSNumber
对象的地址值.使用Tagged Pointer
之后,NSNumber
指针里面存储的数据变成了:存储数据+TaggedPoint标识
,也就是将数据直接存储在了指针中,Tagged Pointer
指针的值不再是地址了,而是真正的值。所以,实际上它不再是一个对象了,它只是一个披着对象皮的普通变量而已。所以,它的内存并不存储在堆中,也不需要malloc和free。在内存读取上有着3倍的效率,创建时比以前快106倍。不但减少了64位机器下程序的内存占用,还提高了运行效率。完美地解决了小内存对象在存储和访问效率上的问题。当指针不够存储数据时,才会使用动态分配内存的方式来存储数据.
Xcode API标记状态(废弃,可用等状态)
在我们开发过程中,总是会有代码的不断迭代,有些API会随着版本的迭代逐渐的被放弃使用,甚至被废弃。为了在我们在使用的过程中了解到这些状态,就需要标记API的状态,引导我们选择更加合适的API。尤其是SDK的开发过程中这一点变得尤为重要。下面就介绍一系列的API状态的用法。
zsh和bash
在 WWDC 2019 期间,苹果隆重介绍了 macOS 的下一个重大版本 Catalina 。不过对开发者和高级用户来说,macOS Catalina 还有一个重大的变化 —— 因为 zsh 已经取代 bash,成为了新版操作系统中的默认 shell 。为帮助用户顺利过渡,bash 并不会立即从 macOS Catalina 中消失,但大家最好尽快习惯这一变化。