当前位置:首页 > 移动开发 > iOS开发pdf电子书
《iOS开发快速进阶与实战》电子书封面

iOS开发快速进阶与实战

  • 发布时间:2021年04月05日 22:57:19
  • 作者:黄新宇
  • 大小:13.63MB
  • 类别:iOS开发电子书
  • 格式:PDF
  • 版本:完整超清版
  • 评分:8.8

iOS开发快速进阶与实战 PDF 完整超清版

    iOS开发快速进阶与实战》是一本关于iOS开发相关的电子书资源,介绍了关于iOS开发、iOS实战方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小13.63MB,黄新宇编写,目前豆瓣、亚马逊、当当、京东等综合评分为:7.7分,我们还提供了PDF格式内容下载,我们还提供了样章在线阅读,一起来看下具体内容。

    Tags:iOS开发 iOS实战 

    内容介绍

    iOS开发快速进阶与实战

    作者: 黄新宇 著

    出版时间: 2018

    《iOS开发快速进阶与实战》偏向于iOS应用的实际开发,介绍了iOS开发过程中的技术实现方案和原理,包含基本知识、底层常用技术原理、开发技巧,以及技能扩展等书各方面,其中大部分章节以实际项目开发中常见的问题为背景,内容阐述方式包括介绍原理、对比技术方案、实际应用、引导读者思维等,并在每一章最后部分归纳总结本章的重点内容。 本书既可以作为高等学校计算机软件技术课程的教材,也可以作为企业iOS开发人员的技术参考书。

    目录

    • 第1章iOS的类
    • 1.1创建并描述一个类
    • 1.2类方法的self
    • 1.3类属性
    • 1.4黑魔法
    • 第2章底层实现分析
    • 2.1内存分区
    • 2.2初始化
    • 2.3拷贝
    • 2.4数组与集合
    • 2.5字典与哈希表
    • 2.6KVC
    • 2.6.1对象关系映射
    • 2.6.2对私有属性访问
    • 2.6.3控制是否触发setter、getter方法
    • 2.6.4KVC进阶用法
    • 第3章开发原理相关
    • 3.1定时器的引用
    • 3.2动画事务
    • 3.3响应链
    • 3.4UITableViewCell高度
    • 3.5图片初始化
    • 3.6静态库与动态库
    • 3.7离屏渲染
    • 3.8约束动画
    • 第4章线程安全——锁
    • 4.1NSLock
    • 4.2synchronized
    • 4.3pthread
    • 4.3.1互斥锁(普通锁)
    • 4.3.2递归锁
    • 4.3.3pthread信号量
    • 4.3.4读写锁
    • 4.4信号量
    • 4.5NSConditionLock与NSCondition
    • 4.5.1NSConditionLock
    • 4.5.2NSCondition
    • 4.6自旋锁
    • 4.7递归锁
    • 小结
    • 第5章排序算法
    • 5.1冒泡排序
    • 5.2选择排序
    • 5.3插入排序
    • 5.4快速排序
    • 5.5希尔排序
    • 5.6归并排序
    • 5.7堆排序
    • 5.8基数排序
    • 小结
    • 第6章技能进阶与思考
    • 6.1按钮的图文位置
    • 6.2创建Pod库
    • 6.3子控制器
    • 6.4APP状态恢复
    • 6.5APP编译过程
    • 6.6APP启动
    • 6.7多线程
    • 6.7.1GCD
    • 6.7.2NSOperation
    • 6.8继承与多态
    • 6.9缓存
    • 6.10字数限制
    • 参考文献
       

    读书笔记

    vue中axios请求的封装实例代码

    axios

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中, 也是vue官方推荐使用的http库;封装axios,一方面为了以后维护方便,另一方面也可以对请求进行自定义处理

    安装

    npm i axios

    封装

    我把axios请求封装在http.js中,重新把get请求,post请求封装了一次

    首先,引入axios

    import axios from 'axios'

    设置接口请求前缀

    一般我们开发都会有开发、测试、生产环境,前缀需要加以区分,我们利用node环境变量来作判断,

    if (process.env.NODE_ENV === 'development') {
     axios.defaults.baseURL = 'http://dev.xxx.com'
    } else if (process.env.NODE_ENV === 'production') {
     axios.defaults.baseURL = 'http://prod.xxx.com'
    }

    在localhost调试时,直接用开发地址一般都会有跨域的问题,所以我们还需要配置代理

    本项目是vue cli3搭建的,代理配置是在vue.config.js文件中:

    module.exports = {
     devServer: {
     proxy: {
     '/proxyApi': {
     target: 'http://dev.xxx.com',
     changeOrigin: true,
     pathRewrite: {
      '/proxyApi': ''
     }
     }
     }
     }
    }

    这样就成功把/proxyApi 指向了 'http://dev.xxx.com',重启服务

    修改一下http.js中的配置

    if (process.env.NODE_ENV === 'development') {
     axios.defaults.baseURL = '/proxyApi'
    } else if (process.env.NODE_ENV === 'production') {
     axios.defaults.baseURL = 'http://prod.xxx.com'
    }

    拦截器

    接着设置超时时间和请求头信息

    axios.defaults.timeout = 10000
    // 请求头信息是为post请求设置
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

    axios很好用,其中之一就是它的拦截器十分强大,我们就可以为请求和响应设置拦截器,比如请求拦截器可以在每个请求里加上token,做了统一处理后维护起来也方便,响应拦截器可以在接收到响应后先做一层操作,如根据状态码判断登录状态、授权。

    // 请求拦截器
    axios.interceptors.request.use(
     config => {
     // 每次发送请求之前判断是否存在token
     // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况,此处token一般是用户完成登录后储存到localstorage里的
     token && (config.headers.Authorization = token)
     return config
     },
     error => {
     return Promise.error(error)
     })
    // 响应拦截器
    axios.interceptors.response.use(response => {
     // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据
     // 否则的话抛出错误
     if (response.status === 200) {
     return Promise.resolve(response)
     } else {
     return Promise.reject(response)
     }
    }, error => {
     // 我们可以在这里对异常状态作统一处理
     if (error.response.status) {
     // 对不同返回码对相应处理
     // 未登录跳转登录页面
     // 未授权调取授权接口
     // 请求不存在作提示用户
     return Promise.reject(error.response)
     }
    })

    get post的封装

    httpGet: 一个参数是请求的url,一个就携带的请求参数,返回promise对象

    // get 请求
    export function httpGet({
     url,
     params = {}
    }) {
     return new Promise((resolve, reject) => {
     axios.get(url, {
     params
     }).then((res) => {
     resolve(res.data)
     }).catch(err => {
     reject(err)
     })
     })
    }

    httpPost: 原理和get差不多,需要注意,这里多了个data参数,post请求提交前需要对它进行序列号操作,这里是通过transformRequest做处理;另外两个参数url,params和get请求的一样;

    // post请求
    export function httpPost({
     url,
     data = {},
     params = {}
    }) {
     return new Promise((resolve, reject) => {
     axios({
     url,
     method: 'post',
     transformRequest: [function (data) {
     let ret = ''
     for (let it in data) {
      ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
     }
     return ret
     }],
     // 发送的数据
     data,
     // url参数
     params
    
     }).then(res => {
     resolve(res.data)
     })
     })
    }

    如何使用

    我把所有的接口调用都在api.js文件中

    先引入封装好的方法,再在要调用的接口重新封装成一个方法暴露出去

    import { httpGet, httpPost } from './http'
    export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params })

    在页面中可以这样调用:

    // .vue
    import { getorglist } from '@/assets/js/api'
    
    getorglist({ id: 200 }).then(res => {
     console.log(res)
    })

    这样可以把api统一管理起来,以后维护修改只需要在api.js文件操作即可。

    完整代码

    最后贴上完整代码

    // http.js
    import axios from 'axios'
    
    // 环境的切换
    if (process.env.NODE_ENV === 'development') {
     axios.defaults.baseURL = '/proxyApi'
    } else if (process.env.NODE_ENV === 'production') {
     axios.defaults.baseURL = 'http://prod.xxx.com'
    }
    
    // 请求拦截器
    axios.interceptors.request.use(
     config => {
     token && (config.headers.Authorization = token)
     return config
     },
     error => {
     return Promise.error(error)
     })
    
    axios.defaults.timeout = 10000
    
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
    
    // 响应拦截器
    axios.interceptors.response.use(response => {
     if (response.status === 200) {
     return Promise.resolve(response)
     } else {
     return Promise.reject(response)
     }
    }, error => {
     if (error.response.status) {
     // 对不同返回码对相应处理
     return Promise.reject(error.response)
     }
    })
    
    // get 请求
    export function httpGet({
     url,
     params = {}
    }) {
     return new Promise((resolve, reject) => {
     axios.get(url, {
      params
     }).then((res) => {
      resolve(res.data)
     }).catch(err => {
      reject(err)
     })
     })
    }
    
    // post请求
    export function httpPost({
     url,
     data = {},
     params = {}
    }) {
     return new Promise((resolve, reject) => {
     axios({
      url,
      method: 'post',
      transformRequest: [function (data) {
      let ret = ''
      for (let it in data) {
       ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
      }
      return ret
      }],
      // 发送的数据
      data,
      // url参数
      params
    
     }).then(res => {
      resolve(res.data)
     })
     })
    }
    // api.js
    import { httpGet, httpPost } from './http'
    export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params })
    
    export const save = (data) => {
     return httpPost({
     url: 'apps/wechat/api/save_member',
     data
     })
    }
    // .vue
    <script>
    import { getorglist } from '@/assets/js/api'
    export default {
     name: 'upload-card',
     data() {},
     mounted() {
     getorglist({ id: 200 }).then(res => {
      // console.log(res)
     })
     },
    }
    </script>

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对码农之家的支持。

    以上就是本次介绍的iOS开发电子书的全部相关内容,希望我们整理的资源能够帮助到大家,感谢大家对码农之家的支持。

    上一篇:分布式中间件技术实战:Java版

    下一篇:Adobe After Effects CC 高手之路

    查看更多
    下载地址:百度网盘下载
    iOS开发 相关电子书
    大话移动APP测试 Android与iOS应用测试指南
    大话移动APP测试 Android与iOS应用测试指南 PDF 高清版

    移动互联网软件测试无论从思想还是技术上都与传统互联网产品或软件产品截然不同,导致了很多正在移动互联网中摸索的测试人员迷失了方向。作为一名移动互联网的测试从业人员,需要正

    立即下载
    iOS企业级应用开发技术
    iOS企业级应用开发技术 PDF 超清原版

    这书聚焦点在APP商品的设计构思、开发设计和经营方面,着重强调构架和设计模式的必要性,清醒地将设计模式运用到编码的撰写中,重中之重详细介绍iOS公司级应用程序开发的设计思维方法

    立即下载
    DOS/BIOS高手真经
    DOS/BIOS高手真经 PDF 高清版

    本书详实而精确地讲解了DOS和BIOS相关知识和应用技巧。从维护计算机系统、提高工作效率和网络管理的实际需要出发,以实际应用驱动,直接告诉读者如何用DOS命令和BIOS设置快速高效地完成

    立即下载
    iOS编程基础:Swift、Xcode和Cocoa入门指南
    iOS编程基础:Swift、Xcode和Cocoa入门指南 PDF 高清扫描版

    iOS编程基础:Swift、Xcode和Cocoa入门指南 主要介绍XcodeIDE、CocoaTouch框架与Swift2.0。通过阅读本书,你将学习Swift面向对象的概念、理解如何使用Apple的开发工具,以及探索Cocoa是如何提供iOS应用所

    立即下载
    iOS9开发快速入门
    iOS9开发快速入门 PDF 高清版

    《iOS9开发快速入门》全面、系统地介绍了iOS 9开发技术。本书提供了大量实例,供读者实战演练。另外,本书内容讲解详细,示例丰富,书中每一个知识点都配备了对应的实例和运行结果图,

    立即下载
    Swift开发iOS:App快速入门与实战
    Swift开发iOS:App快速入门与实战 PDF 高质量版

    Swift集合了C与Objective-C程序语言的优点,但比这两种编译语言在编译与运行上更加快捷。书中根据Swift语言特性与与应用定位归纳出简单的学习架构,期望让初学者一次开发就上手

    立即下载
    读者心得
    144小时57分钟前回答

    js判断手机系统是android还是ios

    话不多说,请看代码: script type="text/javascript"var u = navigator.userAgent;var isAndroid = u.indexOf('Android') -1 || u.indexOf('Adr') -1; //android终端var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端alert('是否是Android:'+isAndroid);alert('是否是iOS:'+isiOS);/script 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持码农之家! ……

    130小时55分钟前回答

    vue axios 给生产环境和发布环境配置不同的接口地址(推荐)

    本项目是vue-cli搭建的项目框架,引入axios用于数据请求。配置不同的接口地址,(首先确保已经集成了axios,如对集成axios有疑问的道友,可参看我之间的一篇vue-cli 引入axios)操作如下 一、设置不同的接口地址 找到如下文件 /config/dev.env.js /config/prod.env.js 之后增加接口地址域名配置,增加后的文件内容如下 二、在自己重新封装的axios文件中(api/api.js),将配置好的接口地址作为baseURL拼接到接口路径中 详细的api.js文件可参考如下代码,根据自己公司项目组编码习惯可自作调整 // 配置API接口地址 var root = process.env.API // 引用axios var axios = require('axios') // 自定义判断元素类型JS function toType (obj) { return ({}).to……

    36小时48分钟前回答

    Vue 中axios配置实例详解

    1.GET 请求 //向具有指定ID的用户发出请求axios.get('/user?ID=12345').then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});// 也可以通过 params 对象传递参数axios.get('/user', {params: {ID: 12345}}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);}); 2.POST请求 axios.post('/user', {firstName: 'Fred',lastName: 'Flintstone'}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);}); 3执行多个并发请求 function getUserAccount() {return axios.get('/user/12345');}function getUserPermissions() {return axios.get('/user/12345/permissions');}axios.all([getUserAccount(), getUserPermissions()]).then(axios.spread(function (acct, perms) {//两个请……

    码农之家

    郭良材 提供上传

    资源
    20
    粉丝
    50
    喜欢
    172
    评论
    2

    Copyright 2018-2021 www.xz577.com 码农之家

    版权投诉 / 书籍推广:520161757@qq.com