afnetworking

AFNetworking源码解析与面试考点思考

走远了吗. 提交于 2020-04-24 16:48:18
最近重读了AFNetworking 3.x的源码,算是温故而知新吧。也梳理了一些优秀的代码细节和面试考点,罗列下来,发现这个库小而精致,简直初学者的宝藏库。 开源库怎么看? 先说个题外话,阅读优质的开源代码库,绝对是程序员们快速提升自我的有效途径,而怎样高效率的去阅读源码同样也是一个问题,不知道有没有人和我之前一样,碰到过读倒是读了,但总感觉收获不大的情况。 这里分享一下我的一些读码经验: 多思考,多抛出问题,比如说 整体的代码结构是怎样的?类与类之间的关系是怎样的?为什么要这么设计? 代码有没有涉及到多线程,其线程模型是怎样的?哪类问题可以适用这种多线程的方案? 代码中使用了哪些设计模式?具体是怎么实现的? 也可以关注代码细节,遇到不熟悉的用法不要放过,多刨根究底才能夯实基础 关于 AFNetworking 的一些优秀代码细节,我这里也整理了一部分,可以查阅后文 一定要记笔记和总结,能分享更好。 参考费曼学习法,我认为这一点是最好的加深理解和强化记忆的手段。随着年龄的增大,记忆力会有所衰退,有个笔记能够回顾,能节约大把再次记忆的时间。此外,多与人分享还能够提升自己的影响力,与人交流验证,也能够为自己查缺补漏。 AFNetworking 3.x的代码结构 还是说回到 AFNetworking 这里,AF的代码结构大部分人应该都了解,这里我简单介绍下。 AFNetworking 3

iOS静态库开发中引入的第三方库可能与宿主APP中冲突的解决方案

眉间皱痕 提交于 2020-04-24 03:59:20
SDK开发中我们可能希望使用已有的第三方开源库,比如在发送请求的功能上我们更希望用AFNetworking而非直接使用NSURLSession,又如在实现socket连接时我们更希望用SocketRocket而非自己从零实现。但如果我们直接把AFNetworking的源文件拖到静态库SDK里,而宿主APP也引入了AFNetworking,这时运行代码就会报符号冲突(duplicate symbols)的错误。 符号冲突报错 这时大部分人的解决方案都是手动修改引入到SDK里的开源库代码,包括类名、分类名、全局常量名、协议名等会导致冲突的符号。其实对于像AFNetworking(v3.2.1)这种源码量较少的第三方库来说,需要修改的地方都要多达47个,可想而知这是一项多么低效和易错的解决方案,而且如果下次需要升级SDK中的该第三方库,你需要再重新手动改一遍……下边我们来一步步深入解决这件麻烦事。 首先我们考虑下怎样避免每次都要修改第三方库源码,如果有一个单独的文件来存原符号和重命名符号的对应关系就好了,我们自然而然地会想到用宏定义。创建一个头文件,比如叫 XNGNamespace.h // XNGNamespace.h #define AFURLSessionManager XNGURLSessionManager #define

AFHTTPRequestOperation works fine but AFHTTPSessionManager doesn't work

喜欢而已 提交于 2020-03-24 14:25:17
问题 I am doing an SOAP request with a web service using AFNetworking2.2.1 .I have read the documentation on AFNetworking, it says that Although AFHTTPRequestOperationManager is usually the best way to go about making requests, AFHTTPRequestOperation can be used by itself.It means that the recommended way is using the AFHTTPSessionManager .First, I use the AFHTTPSessionManager ,but it doesn't work.Then I tried AFHTTPRequestOperation ,it works fine.This really confused me. Here are the two code

iOS日常开发常用组件

做~自己de王妃 提交于 2020-03-20 20:04:47
3 月,跳不动了?>>> 网络&数据 AFNetworking 常用的网络库 [ https://github.com/AFNetworking/AFNetworking ] FMDB SQLite的第三方库 [ https://github.com/ccgus/fmdb ] PINCache kv的数据缓存类库 https://github.com/pinterest/PINCache UICKeyChainStore Keychain操作库 [ https://github.com/kishikawakatsumi/UICKeyChainStore ] MIHCrypto 数据加密库 [ https://github.com/hohl/MIHCrypto ] Base64 Base64库 [ https://github.com/ekscrypto/Base64 ] 视图&动画 VCTransitionsLibrary 视图切换库 https://github.com/ColinEberhardt/VCTransitionsLibrary MBProgressHUD 提示框第三方库 https://github.com/jdg/MBProgressHUD SDWebImage 图片加载/缓存库 [ https://github.com/rs/SDWebImage ]

如何在Git存储库中移动现有的Git子模块?

给你一囗甜甜゛ 提交于 2020-03-11 19:39:04
我想在我的Git超级项目中更改Git子模块的目录名。 假设我的 .gitmodules 文件中有以下条目: [submodule ".emacs.d/vimpulse"] path = .emacs.d/vimpulse url = git://gitorious.org/vimpulse/vimpulse.git 我需要键入什么来将 .emacs.d/vimpulse 目录移动到 .emacs.d/vendor/vimpulse 而不先删除它( 在这里 和 这里 解释),然后重新添加它。 Git真的需要子模块标签中的整个路径 [submodule ".emacs.d/vimpulse"] 或者是否也可以只存储子项目的名称? [submodule "vimpulse"] #1楼 给定的解决方案对我不起作用,但类似的版本确实...... 这是一个克隆的存储库,因此子模块git repos包含在顶级存储库.git目录中。 所有阳离子都来自顶级存储库: 编辑.gitmodules并更改相关子模块的“path =”设置。 (无需更改标签,也无需将此文件添加到索引中。) 编辑.git / modules / name / config并更改相关子模块的“worktree =”设置 跑: mv submodule newpath/submodule git add -u git add

iOS开发~CocoaPods使用详细说明

你离开我真会死。 提交于 2020-03-08 09:36:27
一、概要 iOS 开发时,项目中会引用许多第三方库,CocoaPods( https://github.com/CocoaPods/CocoaPods )可以用来方便的统一管理这些第三方库(从一个坑出来,又进了另一个坑而已……)。 二、安装 由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下: 注:要使用 CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境 1、Ruby环境搭建 当前安装环境为Mac mini 10.8.5。Mac OS本身自带Ruby,但还是更新一下保险,因为我第一次安装在没有更新Ruby的情况下就失败了。 a 查看下当前ruby版本:打开终端输入 ruby -v(确实安装了,不过用这个版本接下来工作失败了,所以更新下ruby) [objc] view plain copy print ? ritekiMac-mini:PodTest lucky$ ruby -v ruby 1 .8 .7 ( 2 0 1 2- 0 2- 0 8 patchlevel 3 5 8) [universal-darwin 1 2 .0] ritekiMac-mini:PodTest lucky$ b 更新ruby 终端输入如下命令( 把Ruby镜像指向taobao,避免被墙,你懂得) gem sources --remove

iOS开发之AFNetworking 3.0.4使用

一个人想着一个人 提交于 2020-03-06 10:58:08
博客迁移到简书一来,一直没有时间来写博客了,以前的也没有整理,这个算是简书上的第一个博客吧!以后有时间还是得把以前的迁移过来,毕竟都是心血啊,也有转载的很多大神们的技术文章,舍不得丢弃呀。。。 昨天使用Cocoapods导入AFN做POST的时候,导入的最新版的3.0.4,突然发现找不到AFHTTPRequestOperationManager了。。。上github上一看,发现没有这个了。刚开始以为是cocoapods没有给我导进去,因为是小demo,就想自己写一个网络请求的,发现也没有这NSURLConnection了,被弃用了,突然意识到,这个就是AFHTTPRequestOperationManager找不到的原因了,它是基于NSURLConnection封装的!!于是找了一下,现在都用的是NSURLSession了,AFN中用的是AFHTTPSessionManager了~~ 特地记录下来,以便遇到这个的朋友们看看! ps:如果想用以前的话,cocoapods 就不要用最新的版本了,2.6的上面有。 GET请求 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:URL parameters:nil progress:^(NSProgress * _Nonnull

封装AFNetworking网络工具类(Objective-C)

时光怂恿深爱的人放手 提交于 2020-03-06 10:57:50
AFNetworking是一款在OS X和iOS下都令人喜爱的网络库。为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本。 NSURLConnection的API已废弃 AFNetworking 1.0建立在NSURLConnection的基础API之上 ,AFNetworking 2.0开始使用NSURLConnection的基础API ,以及较新基于NSURLSession的API的选项。 AFNetworking 3.0现已完全基于NSURLSession的API,这降低了维护的负担,同时支持苹果增强关于NSURLSession提供的任何额外功能。由于Xcode 7中,NSURLConnection的API已经正式被苹果弃用。虽然该API将继续运行,但将没有新功能将被添加,并且苹果已经通知所有基于网络的功能,以充分使NSURLSession向前发展。 // ViewController.m // 网络工具类 // // Created by mac on 15/12/7. // Copyright © 2015年 mac. All rights reserved.

pod》error:The dependency `` is not used in any concrete target

醉酒当歌 提交于 2020-03-04 22:08:20
一、概要 iOS 开发时,项目中会引用许多第三方库,CocoaPods( https://github.com/CocoaPods/CocoaPods )可以用来方便的统一管理这些第三方库(从一个坑出来,又进了另一个坑而已……)。 二、安装 由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下: 注:要使用CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境 1、Ruby环境搭建 当前安装环境为Mac mini 10.8.5。Mac OS本身自带Ruby,但还是更新一下保险,因为我第一次安装在没有更新Ruby的情况下就失败了。 a 查看下当前ruby版本:打开终端输入 ruby -v(确实安装了,不过用这个版本接下来工作失败了,所以更新下ruby) ritekiMac-mini:PodTest lucky$ ruby -v ruby 1 .8 .7 ( 2 0 1 2- 0 2- 0 8 patchlevel 3 5 8) [universal-darwin 1 2 .0] ritekiMac-mini:PodTest lucky$ b 更新ruby 终端输入如下命令(把Ruby镜像指向taobao,避免被墙,你懂得) gem sources --remove https://rubygems.org/ gem sources

IOS中CocoaPods安装与使用

霸气de小男生 提交于 2020-02-26 08:10:08
网上有很多文章关于 cocoaPods配置文章,其实cocoaPods配置并不难,只是比较繁琐而已,我也是照着网站文章一步步搭建配置成功。写这篇文章的目的就是像做笔记一样,便于以后用的时候好回忆。废话不多说,直接开始。 CocoaPods在Ios中强大的功能,我就不再这里一一解说(不清楚的盆友,可以搜索一下) 一:安装前提 1:必须安装Xcode 2: 必须安装 xcode 中 command Line 二:开始安装cocoaPods (我假设大家都安装第一步) 1: 下载 /安装 cocoapods ①:打开终端 输入命令 ②:在终端上直接输入 gem install cocoapods 三:使用CocoaPods 1:你先随便在XCode中建一个项目。 2:打开终端,使用cd命令定位到需要使用CocoaPods的项目根路径。 3: 现在需要在项目中建立Podfile文件 (这个是 CocoaPods 固定规则) 步骤①:使用创建Podfile的命令 touch Podfile 步骤②: 然后编辑Podfile文件,命令 open -e Podfile 步骤③: 在弹出的编辑界面中输入(你要下载的内容) platform :ios, '7.0' pod 'Reachability', '~> 3.2' pod 'SDWebImage', '~> 3.7.3' pod