SDWebImageRefreshCached这个策略用于那些图片URL是静态的(图片更新时URL是不变的,SD给的例子是 Facebook graph api profile pics),这个时候它会根据HTTP header的 cache-control 字段来控制缓存并且使用NSURLCache来缓存图片,SDWebImageDownloader(id)中判断SDWebImageContextLoaderCachedImage存在并且策略是SDWebImageRefreshCached的情况,仍然会发起请求。
SDWebImageDownloader
self.URLOperations 包含所有的下载队列
这句话很重要 url和callback关联dic // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data.
如上图所示,不同进程之间共用系统dylib的_TEXT区,但是各自维护对应的_DATA区。 所有动态链接库和我们App中的静态库.a和所有类文件编译后的.o文件最终都是由dyld(the dynamic link editor),Apple的动态链接器来加载到内存中。每个image都是由一个叫做ImageLoader的类来负责加载(一一对应),那么ImageLoader又是什么呢?
dsymutil is a tool to manipulate archived DWARF debug symbol files. 使用dsymutil可以对dSYM文件进行如下操作:从exe_path中提取成dSYM文件、将executable或者object文件中的symbol table dump出来、更新dSYM文件以让dSYM文件包含最新的accelerator tables and other DWARF optimizations。
Debug Info Format
在Xcode中可以选择DWARF和DWARF with dSYM file,推荐的设置是Debug用DWARF;Release使用DWARF with dSYM file。
$ cd /LibSDK $ ls libiot.sdk.a $ lipo -info libiot.sdk.a Architectures in the fat file: libiot.sdk.a are: armv7 arm64 $ lipo libiot.sdk.a -thin armv7 -output tbv7.a $ lipo libiot.sdk.a -thin arm64 -output tb64.a $ ls libiot.sdk.a tb64.a tbv7.a $ ar -d tbv7.a AsyncSocket.o $ ar -d tb64.a AsyncSocket.o $ lipo -create tbv7.a tbv64.a -output libSun.a
lipo源于mac系统要制作兼容powerpc平台和intel平台的程序。 lipo 是一个在 Mac OS X 中处理通用程序(Universal Binaries)的工具。现在发售或者提供下载的许多(几乎所有)程序都打上了“Universal”标志,意味着它们同时具有 PowerPC 和 Intel 芯片能够处理的代码。不过既然你可能不在意其中的一个,你就能够使用 lipo 来给你的程序“瘦身”。
/* Policy for accepting cookies. This overrides the policy otherwise specified by the cookie storage. */ @propertyNSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy;
/* Enable extended background idle mode for any tcp sockets created. Enabling this mode asks the system to keep the socket open * and delay reclaiming it when the process moves to the background (see https://developer.apple.com/library/ios/technotes/tn2277/_index.html) */ @propertyBOOL shouldUseExtendedBackgroundIdleMode NS_AVAILABLE(10_11, 9_0);
Podfile.lock 这是 CocoaPods 创建的最重要的文件之一。它记录了需要被安装的 pod 的每个已安装的版本。如果你想知道已安装的 pod 是哪个版本,可以查看这个文件。推荐将 Podfile.lock 文件加入到版本控制中,这有助于整个团队的一致性。
Manifest.lock 这是每次运行 pod install 命令时创建的 Podfile.lock 文件的副本。如果你遇见过这样的错误 沙盒文件与 Podfile.lock 文件不同步 (The sandbox is not in sync with the Podfile.lock),这是因为 Manifest.lock 文件和 Podfile.lock 文件不一致所引起。由于 Pods 所在的目录并不总在版本控制之下,这样可以保证开发者运行 app 之前都能更新他们的 pods,否则 app 可能会 crash,或者在一些不太明显的地方编译失败。