做者: halohily前端
在 iOS 开发中,图片载入到内存中占用的空间和它的二进制文件大小无关,而是基于图片的尺寸。在 WWDC 2018 中,苹果为咱们建议了一种你们平时使用较少的大图加载方式,它的实际占用内存与理论值最为接近。下面是示例代码:git
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微信小程序
做者: Lefe_x浏览器
之前获取一个应用的 ipa 包垂手可得,然而今天想获取一个 ipa 包,若是没有适当的方法,很是费劲。今天咱们就聊聊如何获取 ipa 包,下面这三种方式都通过亲自验证,可能因为不一样环境会出现异常,若遇到问题能够到【知识小集】gong-Zhong-Hao 留言。若是你有更好的方式,不妨分享出来。安全
苹果既然在高版本的 iTunes 取消了获取 ipa 包的入口,那咱们就想办法降级处理。须要下载低版本的 iTunes。 http://secure-appldnld.apple.com/itunes12/091-33628-20170922-EF8F0FE4-9FEF-11E7-B113-91CF9A97A551/iTunes12.6.3.dmg。bash
下载完后,安装,第一次启动的时候按住 option 键,这样才不会报错,安装完成后,便可下载应用的 ipa 包。下载完成后,在应用的图标上按右键,show in finder 便可找到 ipa 包。微信
电脑安装一个 pp助手客户端,直接下载越狱应用,下载完成后,便可在“本地应用”中找打 APP 的 ipa 包。须要强调一点,这种方式下载的应用是解密后的 ipa。weex
在 Mac 中的 iTunes 中下载应用,经过 Charles 抓包获取到 ipa 包的下载地址,直接在浏览器中下载,下载地址是在 p52-buy.itunes 这个域名下。app
做者: 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中我咨询了相关的苹果工程师,结果是为了性能,内部会有一些同步机制。之后你们遇到这样的问题能够参考一下。
做者: KANGZUBIN
当咱们的 iOS 工程要引用其它第三方开源库时,通常有如下几种方式:
(1)下载源代码直接拖拽到工程中;
(2)使用 CocoaPods 管理,当开启 use_frameworks!
标记时,第三方库会被编译成 .framework
引入工程,不然就会编译成 .a
静态库;
(3)使用 Carthage 管理,第三方库会被编译成 .framework
而后导入工程;
(4)直接下载做者编译好的 .framework
导入工程。
但当咱们在代码中要 import 第三方库的头文件时,对于这几种状况,写法都不太同样,以 AFNetworking
为例,总结以下:
""
引号的方式 import,#import "AFNetworking.h"
复制代码
use_frameworks!
,则将编译成 .framework
库,只能以 <>
尖括号的方式 import,此外,对于(3)和(4)也是这样,#import <AFNetworking/AFNetworking.h>
复制代码
use_frameworks!
,则将编译成 .a
库,此时有以下 3 种方式 import,#import "AFNetworking.h"
// 或者
#import <AFNetworking.h>
// 或者
#import <AFNetworking/AFNetworking.h>
复制代码
那么问题来了,若是咱们在写一个 SDK 或者私有的 Pods 库,须要宿主 App 工程引用某一个第三方库,如上所述,宿主工程有不少方式引用第三方库,这样咱们就没法肯定应该以哪一种方式 import 头文件,怎么办呢?这时候咱们就可使用 __has_include()
宏来判断。
__has_include()
宏接收一个预引入的头文件名称(引号或者尖括号均可以)做为参数,若是该头文件可以被引入则返回 1
,不然返回 0
,使用起来以下:
#if __has_include(<AFNetworking/AFNetworking.h>)
#import <AFNetworking/AFNetworking.h>
#else
#import "AFNetworking.h"
#endif
复制代码
欢迎关注咱们的公众号:iOS-Tips,也欢迎加入咱们的群组讨论问题:
coldlight_hh
或 wsy9871
,请注明 iOS 入群
;coldlight_hh
或者 bob5201215
,请注明 Flutter 入群;wsy9871
或 coldlight_hh
,请注明 前端入群
wsy9871
或 coldlight_hh
,请注明 PWA入群
kangzubin
,请注明 小程序入群
另外上面技术群群规比较严,主要以讨论技术为主,发广告等行为都一概踢出群。某天「 知识小集 · 前端修行室 」进来个妹子,而后群就炸了,控制不住你们的情绪,因此专门开了个「 知识小集 · 吐槽吹水群 」
,这个群暂时不对外开放,能够加入技术群后再拉群。
知识小集是一个团队公众号,主要定位在移动开发领域,分享移动开发技术,包括 iOS、Android、小程序、移动前端、React Native、weex 等。每周都会有 原创 文章分享,咱们的文章都会在公众号首发。欢迎关注查看更多内容。