专栏名称: 知识小集
目录
相关文章推荐
畅赏黑龙江  ·  别遗憾!黑龙江的冬天还没落幕!文末领好礼 ·  9 小时前  
畅赏黑龙江  ·  别遗憾!黑龙江的冬天还没落幕!文末领好礼 ·  9 小时前  
黑龙江省应急管理厅  ·  龙江天气 | 注意大风!局地8~9级 ·  9 小时前  
哈尔滨日报  ·  16岁学生签约做主播被索赔30万!合同有效吗? ·  3 天前  
51好读  ›  专栏  ›  知识小集

「 iOS知识小集 」2018 · 第 19 期

知识小集  · 掘金  ·  · 2018-07-02 00:33

正文

阅读 47

「 iOS知识小集 」2018 · 第 19 期

这周公众号发布的以下文章:

本期知识小集的主要内容包括:

  • WWDC 2018 苹果推荐的大图加载方式
  • 获取 ipa 包三种姿势
  • git 恢复误删的 stash
  • 让人怀疑人生的一段代码
  • Objective-C import 第三方库头文件总结

WWDC 2018 苹果推荐的大图加载方式

作者 : halohily

在 iOS 开发中,图片载入到内存中占用的空间和它的二进制文件大小无关,而是基于图片的尺寸。在 WWDC 2018 中,苹果为我们建议了一种大家平时使用较少的大图加载方式,它的实际占用内存与理论值最为接近。下面是示例代码:

func downsample(imageAt imageURL: URL, to pointSize: CGSize, scale: CGFloat) -> UIImage {
	let sourceOpt = [kCGImageSourceShouldCache : false] as CFDictionary
	// 其他场景可以用createwithdata (data并未decode,所占内存没那么大),
	let source = CGImageSourceCreateWithURL(imageURL as CFURL, sourceOpt)!

	let maxDimension = max(pointSize.width, pointSize.height) * scale
	let downsampleOpt = [kCGImageSourceCreateThumbnailFromImageAlways : true,
kCGImageSourceShouldCacheImmediately : true ,
kCGImageSourceCreateThumbnailWithTransform : true,
kCGImageSourceThumbnailMaxPixelSize : maxDimension] as CFDictionary
	let downsampleImage = CGImageSourceCreateThumbnailAtIndex(source, 0, downsampleOpt)!

	return UIImage(cgImage: downsampleImage)
}

参考资料:

iOS中的图片使用方式、内存对比和最佳实践 https://juejin.im/post/5b2ddfa7e51d4553156be305

获取 ipa 包三种姿势

作者 : Lefe_x

以前获取一个应用的 ipa 包轻而易举,然而今天想获取一个 ipa 包,如果没有适当的方法,非常费劲。今天我们就聊聊如何获取 ipa 包,下面这三种方式都经过亲自验证,可能由于不同环境会出现异常,若遇到问题可以到【知识小集】gong-Zhong-Hao 留言。如果你有更好的方式,不妨分享出来。

方式一:iTunes

苹果既然在高版本的 iTunes 取消了获取 ipa 包的入口,那我们就想办法降级处理。需要下载低版本的 iTunes。 http://secure-appldnld.apple.com/itunes12/091-33628-20170922-EF8F0FE4-9FEF-11E7-B113-91CF9A97A551/iTunes12.6.3.dmg。

下载完后,安装,第一次启动的时候按住 option 键,这样才不会报错,安装完成后,即可下载应用的 ipa 包。下载完成后,在应用的图标上按右键,show in finder 即可找到 ipa 包。

方式二:pp助手

电脑安装一个 pp助手客户端,直接下载越狱应用,下载完成后,即可在“本地应用”中找打 APP 的 ipa 包。需要强调一点,这种方式下载的应用是解密后的 ipa。

方式三:抓包

在 Mac 中的 iTunes 中下载应用,通过 Charles 抓包获取到 ipa 包的下载地址,直接在浏览器中下载,下载地址是在 p52-buy.itunes 这个域名下。

git 恢复误删的 stash

作者 : Vong_HUST

日常开发过程中,相信大家都使用 git,团队协作使用 git-flow。也经常会遇到需求做到一半,产品或者测试反馈一个线上问题,不得不 stash 当前已经写了一半的代码,然后切回到 master 查看问题,然后又恢复回原来的 stash。但是这样操作有时候可能会把之前 stash 的代码误删,辛辛苦苦写的代码说没就没了。那么问题来了,stash 能否像 commit 那样可以随时恢复?

答案当然是肯定的。我们知道只要有提交记录,git 肯定能恢复。其实 stash 某种程度上也可以看做一种 commit,如果还记得当时 stash 的名称,就更加容易恢复了。可以使用如下命令行来恢复,其中 'your stash name' 处填入 stash 操作时留的名称

$ git fsck 2> /dev/null | awk '/commit/{print $3}' | git show --stdin --grep 'your stash name'

最终可以在终端中看到一些 commit 信息和日期,找到对应想恢复的 SHA,然后执行

$ git stash apply your-commit-sha

关于第一处代码的解释:


1. The funny 2> /dev/null part ignores all error messages (they are thrown to /dev/null a dark hole in every UNIX system).
2. git fsck checks your repo for orphaned commits.
3. This prints a list of information, containing the id of the commit and it’s type, for example:

       dangling commit 6108663eaaac4b7e850f6d492cf83e7b65db2c97
       dangling commit b526a825c7730075eb5938917c8b8b7a98f63cdf
       dangling commit 04479ae959fc7470d04e1743f1c7149414c366fa
       dangling blob c6609e5099056da80ea1cdf5bea302225bd6b7ed
       dangling commit 9d65fa867f23d28ce618fcb5d7988180efb67f9c
    
4. We’re after commit ids, which is the third part of each line, so we run: awk '/commit/{print $3}’ to obtain the third part of each line.
5. git show shows information about that particular commit. So if we filter and print those containing the bug number… voilà!

参考

让人怀疑人生的一段代码

作者 : 高老师很忙

大家可以看一下下面两段代码(图1和图2)

如果已经显示了一张沙盒里的图片,这个时候对相同路径的文件进行修改和删除,通常我们认为_imageView应该不受到影响,因为图片已经完成渲染,但事实并非如此,_imageView竟然会跟着发生变化,并且变化的结果也是不可预期的,比如说删除对应的路径的文件,_imageView可能全部黑屏或者一些黑屏,如果不想因为后续操作而影响_imageView的显示,那么就需要用 NSData 中转一下(图3)。

是不是感觉有点怀疑人生?在WWDC 2018 Lab中我咨询了相关的苹果工程师,结果是为了性能,内部会有一些同步机制。以后大家遇到这样的问题可以参考一下。







请到「今天看啥」查看全文