做者: 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 等。每週都會有 原創 文章分享,咱們的文章都會在公衆號首發。歡迎關注查看更多內容。