自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 iOS - 提审报错 ITMS-90809: Deprecated API Usage - UIWebView

iOS 提审时,收到回复邮件:ITMS-90809: Deprecated API Usage - Apple will no longer accept submissions of new apps that use UIWebView as of April 30, 2020 and app updates that use UIWebView as of December 2020. Instead, use WKWebView for improved security and reliabi

2020-06-06 16:34:28 962

原创 iOS - pod package 把私有库打包为 framework

1. 安装 cocoapods-packager如果没有安装 cocoapods-packager ,可以使用如下命令安装:$ gem install cocoapods-packager2. podspec文件的内容结构## Be sure to run `pod lib lint ASDK.podspec' to ensure this is a# valid spec before submitting.## Any lines starting with a # are optio

2020-06-04 15:29:02 3400 2

原创 Golang 学习 - UDP通信

UDP 服务端// 1. 组织一个 UDP 地址结构,指定服务器的 IP + portsvcAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8003")if err != nil { fmt.Println("ResolveUDPAddr err:", err) return}fmt.Println("udp 服务器地址结构,创建完成。")// 2. 创建用于通信的 sokcet ,绑定地址结构udpConn, err := ne..

2020-05-19 23:59:23 772

原创 Golang 学习 - 互斥锁

互斥锁(互斥量)A、B go 程共同访问共享数据,由于 CPU 调度机制,需要对共享数据访问顺序加以限定(同步)。创建 mutex (互斥锁),访问共享数据之前,加锁;访问结束,解锁。在 A go 程加锁期间,B go 程加锁会失败。(阻塞)直至 A go 程解锁后,B go 程才能从阻塞处恢复执行。// 创建一个互斥锁,新建的互斥锁状态为 0 ,表示未加锁。锁只有一把。var...

2020-05-05 18:24:21 176

原创 Golang 学习 - 死锁

单 go 程自己死锁func main() { ch := make(chan int) // 向 channel 中写数据,写完后就会阻塞,等待读数据 ch <- 123 // 由于上边已经阻塞,所以下边代码没来得及执行,造成死锁 num := <-ch fmt.Println("num = ", num)}结论:channel 应该在至少 2 个以上的 ...

2020-05-05 18:00:32 150

原创 Golang 学习 - select

作用:用来监听 channel 上的数据流动方向。( 读? 或 写?)用法:参考 switch case 语句语法。但是!case 后边必须是 IO 操作,不可以任意写判别表达式。注意事项:监听的 case 中,如果没有满足监听条件,则阻塞。监听的 case 中,如果有多个监听条件满足,则任选一个执行(因为需要争夺时间轮片)。可以使用 default 来处理所有 case ...

2020-05-05 17:24:10 148

原创 Golang 学习 - 定时器

普通定时器Timer 定时器结构体:type Timer struct { C <-chan Time r runtimeTimer}time.NewTimer()创建定时器,指定定时时长,定时到达后,系统会自动向定时器的成员 C 写系统当前时间(对 chan 的写操作)。读取 Timer.C 得到定时后的系统时间,并且完成一次 chan 的读操作。tim...

2020-05-05 00:52:37 156 1

原创 Golang 学习 - channel

channel 的定义channel 是一种数据类型。对应一个“管道”(FIFO)make(chan 在channel中传递的数据类型, 容量)容量 = 0 ,表示是无缓冲 channel (如果不设置,默认为 0)容量 > 0 ,表示是有缓冲channel例如:chint := make(chan int)chstring := make(chan string, 0...

2020-05-04 21:22:32 145

原创 Golang 学习 - Goroutine

创建 Goroutine创建于进程中,直接使用 go 关键字,放置于函数调用前面。例如:go test() //并发执行Goroutine 的特性主 go 程结束,子 go 程随之退出。runtime.Gosched()出让当前 go 程所占用的 CPU 时间片;随后从出让位置继续恢复执行。runtime.Goexit()结束调用该函数的当前 go 程。在 ...

2020-05-04 15:53:13 90

原创 Golang 学习 - 文件

创建文件 Create文件不存在就创建,存在则将文件内容清空。参数:name (文件的路径:绝对路径、相对路径)目录分隔符:/打开文件 Open以只读方式打开文件,文件不存在,则打开失败。参数:name (文件的路径:绝对路径、相对路径)打开文件 OpenFile以只读、只写、读写方式打开文件,文件不存在,则打开失败。参数1:name (文件的路径:绝对路径、相对路径...

2020-05-03 00:22:08 142

原创 Golang 学习 - 结构体

结构体定义结构体是一种数据类型。// 定义类型(地位等价于 int/byte/bool/string... )// 通常放在全局位置type Person struct { name string sex byte age int}注意: 结构体内不能赋初值,不能用 var 修饰。普通变量定义和初始化顺序初始化:依次将结构体内部所有成员初始化。var man Pe...

2020-04-29 23:49:00 149

原创 Golang 学习 - 切片

为什么使用切片?数组的容量固定,不能自动拓展。值传递。因为数组作为函数参数时,将整个数组值拷贝一份给形参,内存消耗大,效率低。在 Go语言中,我们几乎可以在所有场景中,使用切片替换数组来使用。切片的本质: 不是一个数组的指针,而是一种数据结构体,用来操作数组内部元素。切片的使用:切片与数组定义区别:– 创建数组时,[2] 指定数组长度。– 创建切片时,[] 为空,或者 […...

2020-04-25 23:19:34 129

原创 Golang 学习 - 指针

指针: 就是地址。指针变量: 就是存储地址的变量。*p: 解引用、间接引用。栈帧:用来给函数运行提供内存空间(取内存于 stack 上)。当函数调用时,产生栈帧;函数调用结束时,释放栈帧。栈帧存储:局部变量、形参、内存字段描述值。(形参与局部变量存储地位等同)指针使用注意:空指针:未被初始化的指针。例如:var p *int野指针:被一片无效的地址空间初始化。格式化输出...

2020-04-25 15:06:07 354

原创 iOS面试 - 蓝牙的基本使用

在 iOS 中,蓝牙是基于 4.0 标准的,设备间低功耗通信。其中 Peripheral 外设相当于 Socket 编程中的 Server 服务端,Central 中心相当于 Client 客户端。本地中心 -> 远程外设本地外设 -> 远程中心使用流程:建立中心角色 —> 扫描外设(discover)—> 发现外设后连接外(connect) —> 扫描外设...

2020-04-25 14:36:26 1814

原创 iOS面试 - UITableView 性能优化

一. cellForRowAtIndexPath:我们经常在注意 cellForRowAtIndexPath :中为每一个 cell 绑定数据,实际上在调用cellForRowAtIndexPath:的时候 cell 还没有被显示出来,为了提高效率我们应该把数据绑定的操作放在 cell 显示出来后再执行,可以在tableView:willDisplayCell:forRowAtIndexPa...

2020-04-19 23:20:12 332

原创 iOS面试 - 加密之时间戳密码(用户密码动态变化)

时间戳密码: 相同的密码明文 + 相同的加密算法,每次计算都得出不同的结果,可以充分保证密码的安全性。原理:将当前时间加入到密码中;因为每次登陆时间都不同,所以每次计算出的结果也都不相同;服务器也需要采用相同的算法,这就需要服务器和客户端时间一致。注意: 服务器端时间和客户端时间,可以有一分钟的误差(比如:第 59S 发送的网络请求,一秒钟后服务器收到并作出响应,这时服务...

2020-04-02 23:32:54 426

原创 iOS面试 - 消息认证码算法 HMAC

HMAC (Message Authentication Code,消息认证码算法) :利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。HMAC 主要使用在身份认证中,认证流程如下:客户端向服务器发送一个请求;服务器接收到请求后,生成一个“随机数”并通过网络传输给客户端;客户端将接收到的“随机数”和“密钥”进行 HMAC-MD5 运算,将得到的结果作为认证数据传递给服...

2020-04-02 23:26:09 315

原创 iOS面试 - MD5(信息摘要)哈希算法

把一个任意长度的字节串变换成一定长度的十六进制的大整数,用于确保“信息传输”完整一致。注意: 字符串的转换过程是不可逆的。MD5 特点:压缩性: 任意长度的数据,算出的 MD5 值长度都是固定的;容易计算: 从原数据计算出 MD5 值很容易;抗修改性: 对原数据进行任何改动,哪怕只修改一个字节,所得到的 MD5 值都有很大区别;弱抗碰撞: 已知原数据和其 MD5 值,想找到一个具有相...

2020-04-02 23:17:57 209

原创 iOS面试 - base64 加密

base64 特点:base64 编码是现代密码学的基础;把原本是 8 个 bit 一组表示数据,改为 6 个 bit 一组表示数据,不足的部分补零,每两个 0 用 一个 = 表示;用 base64 编码之后,数据长度会变大,增加了大约 1/3;虽然 base64 可以作为加密,但是 base64 能够逆运算,非常不安全!base64 编码有个非常显著的特点,末尾有个 ‘=’ 号;...

2020-04-02 23:01:57 178

原创 iOS面试 - SDWebImage(SDWebImage 的实现机制)

主要功能提供 UIImageView 的一个分类,以支持网络图片的加载与缓存管理 一个异步的图片加载器。一个异步的内存+磁盘图片缓存支持 GIF 图片支持 WebP 图片后台图片解压缩处理确保同一个 URL 的图片不被下载多次确保虚假的 URL 不会被反复加载确保下载及缓存时,主线程不被阻塞SDWebImage 下载的核心其实就是利用 NSURLConnection 对象来加载...

2020-04-02 00:02:17 451

原创 iOS面试 - KVO & KVC

KVO1. 概述KVO,是 Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接收到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO 就会自动通知相应的观察者了。2. 实现机制当某个类的对象第一次被观察时,系统就会在运行时动态地创建该类的一个派生类,在这个派生类中重写原类中被观察属性的 setter 方法,派生类在被重写的 set...

2020-03-30 00:26:05 197

原创 iOS面试 - runtime & 消息转发机制

runtime1. 什么是runtime?runtime 运行时机制,是一套比较底层的纯 C 语言 API , 属于1个 C 语言库, 包含了很多底层的 C 语言 API 。(引入 <objc/runtime.h> 或者 <objc/message.h> )程序运行过程时,我们平时编写的 OC 代码, 其实最终都是转成了 runtime 的 C 语言代码。在编译...

2020-03-25 23:38:47 1444

原创 iOS面试 - KVO、NSNotification、delegate 及 block 的区别

KVO:是 cocoa 框架实现的观察者模式,一般同 KVC 搭配使用,通过 KVO 可以监测一个值的变化,比如 View 的高度变化。是一对多的关系,一个值的变化会通知所有的观察者。使用场景:数据的变化,比如股票价格变化,我们一般使用 KVO(观察者模式)。NSNotification:通知也是一对多的使用场景,在某些情况下,KVO 和 NSNotification 是一样的,都...

2020-03-25 22:25:25 249

原创 iOS面试 - id、NSObject*、instancetype 有什么区别?

id:id 声明的对象具有运行时的特性,即可以指向任意类型的 Objcetive-C 的对象;id 是一个 objc_object 结构体指针,定义是typedef struct objc_object *idid 可以理解为指向对象的指针, id 可以指向所有 oc 的对象,编译器不会做类型检查;id 调用任何存在的方法都不会在编译阶段报错,当然如果这个 id 指向的...

2020-03-25 00:16:44 192

原创 iOS面试 - 事件传递 & 响应者链

事件的产生和传递过程:当触摸事件发生时,压力转为电信号,iOS 系统将产生 UIEvent 对象,记录事件产生的时间和类型,然后系统将事件加入到一个由 UIApplication 管理的事件队列中;UIApplication 会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常会先发送事件给应用程序的主窗口(keyWindow);主窗口会在视图层次结构中找到一个最合适的视图来处理...

2020-03-23 00:25:09 516

原创 iOS面试 - 属性 & 成员变量

成员变量: 是不与外界接触的变量,应用于类的内部。(PS:如果你说那用 @public 外部不就是可以访问了么?确实是可以,但是 public 只能适当使用,不要泛滥,否则就像你把钥匙插在你自己家门上了,谁来都可以开门,毫无安全性。)属性: 个人认为最大的好处就是让其他对象可以访问这个变量。而且你可以设置只读、可写等等属性。记住一点,属性变量主要是用于与其他对象相互交互的变量。如果对于上面所说...

2020-03-22 00:20:04 105

原创 iOS面试 - layoutSubViews & drawRects

layoutSubviewsinit 初始化不会触发 layoutSubviews ;addSubview 会触发 layoutSubviews ;设置 view 的 frame 会触发 layoutSubviews,前提是 frame 的值设置前后发生了变化;UIScrollView 滚动会触发 layoutSubviews ;旋转 Screen 会触发父 UIVi...

2020-03-22 00:04:56 185

原创 iOS面试 - UIView & UILayer 的区别与联系

UIView:UIView 是 iOS 系统中界面元素的基础,所有的界面元素都继承自它;它本身完全是由 CoreAnimation 来实现的;它真正的绘图部分,是由一个叫 CALayer(CoreAnimation Layer)的类来管理;UIView 本身更像是一个 CALayer 的管理器,访问它的根绘图和根坐标有关的属性,例如 frame,bounds 等等, 实际上...

2020-03-21 23:46:12 1044

原创 iOS面试 - UIView 的 setNeedsDisplay 和 setNeedsLayout 区别是什么?

(1) 在 Mac OS 中 NSWindow 的父类是 NSResponder,而在 iOS 中 UIWindow 的父类是 UIVIew。程序一般只有一个窗口但是会有很多视图。(2) UIView 的作用:负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体、等等。(3) UIViewController:负责创建其管理的视图及在低内存的时候将他们从内存...

2020-03-21 00:49:44 149

原创 iOS面试 - imageName: 与 imageWithContextOfFile: 的区别?哪个性能高?

imageNamed 采用了缓存机制,如果缓存中已加载了图片,直接从缓存读就行了,每次就不用再去读文件了,效率会更高 。imageWithContextOfFile 加载,图片是不会缓存的,加载速度慢。大量使用 imageNamed 方式会在不需要缓存的地方额外增加开销 CPU 的时间。即使生成的对象被 autoReleasePool 释放了,这份缓存也不释放,如果图像比较大,或者图像比较多,...

2020-03-21 00:34:47 331

原创 iOS - CocoaPods使用总结

1.第三方版本设置target 'MyApp' do //不限制版本,任何版本都可以,默认为最新版本 pod 'AFNetworking' //固定为3.2.0版本,更新也不影响 pod 'AFNetworking', '3.2.0' //大于3.2的版本,不包含3.2 pod 'AFNetworking', '> 3.2' //大于等于3.2的版本,包含3.2...

2020-03-19 22:30:05 129

原创 iOS面试 - Swift和OC的区别

Swift对比OC快速、现代、安全、互动,而且明显优于 Objective-C 语言;可以使用现有的 Cocoa 和 Cocoa Touch 框架;Swift 取消了 Objective-C 的指针/地址等不安全访问的使用;提供了类似 Java 的名字空间(namespace)、泛型(generic)var、运算对象重载(operator overloading);Swift 被简单的...

2020-03-19 00:46:19 1505

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除