Lemon's blog

所有的东西你都要坚持到最后才知道值不值得


  • 家

  • 归档

  • 分类

  • 标签

  • 搜索

iOSCrash信息上报和处理

发表于 2018-08-22 | 分类于 iOS 开发 | 0 Comments
字数统计: 2,672 | 阅读时长 ≈ 11

在iOS开发中,最严重的bug估计就是应用奔溃,如果应用奔溃了,除了做好挨骂的准备,还需要冷静的下来去处理这个事情,接下来我们来看看需要做什么事情。

获取crash信息

我们首先第一个事情就是要知道应用的奔溃信息是什么,这里有几种方式去获取奔溃信息。

  1. 使用Bugly,友盟等第三方SDK登入后台查看奔溃信息
  2. 代码自动上传奔溃信息到服务器,然后通过恢复dSYM文件来查看奔溃信息
  3. 通过使用当前发生应用奔溃的设备导出相关的奔溃信息
  4. 如果是线上的应用,还可以通过itunesConnect来查看(非即时)
阅读全文 »

NSRunLoop与iOS中的倒计时(GCD,CADisplaylink,NSTimer)

发表于 2018-08-20 | 分类于 iOS 开发 | 0 Comments
字数统计: 2,066 | 阅读时长 ≈ 8

相信在iOS开发中大家都用过倒计时的功能,而NSTimer也是大家用得最多用来实现该功能的类,但是可能有人不太清楚NSTimer存在计时不准并且可能会导致引用循环资源无法释放的情况,接下来我会介绍一下使用GCD以及CADisplaylink来实现倒计时以及他们三者的利弊。

RunLoop

在开始介绍下面三种方法之前,我想我们有必要先来介绍一下RunLoop,因为CADisplaylink和NSTimer都是需要通过运行在RunLoop里面才保证了每次到特定的时间点就会执行对应的事件

阅读全文 »

图文混排的四种方案

发表于 2018-08-15 | 分类于 iOS 开发 | 0 Comments
字数统计: 3,181 | 阅读时长 ≈ 15

图文混排有多种方式可以实现,下面我会用四种不同的方式来实现以下界面的效果,并且说明他们的优缺点。

screenshot

NSAttributedString

NSAttributedString提供了自由并且多样式的富文本设置,图文混排的实现是通过插入NSTestAttachment来实现。

阅读全文 »

开发细节之 hash 与 isEqual 方法

发表于 2018-08-14 | 分类于 iOS 开发 | 0 Comments
字数统计: 1,674 | 阅读时长 ≈ 7

isEuqal 与 == 的区别

相信大家都知道在OC中有两种比较是否相等的方法,第一种是直接用==符号比较,第二种是使用isEqual来比较,它们的区别如下:

  1. == 如果是用于基本数据类型的比较,那么直接比较数值,isEqual只能用于OC对象比较
  2. == 如果是用于OC对象比较,那么是判断他们是不是同一个对象,也就是指针所指向的地址是否一致。而isEqual则是比较两个对象是否相同。
阅读全文 »

细说HTTP与HTTPS

发表于 2018-08-10 | 分类于 其他技术 | 0 Comments
字数统计: 2,597 | 阅读时长 ≈ 9

前言

网上已经有很多关于HTTP与HTTPS的文章,为什么我还要写这篇文章呢,源于昨天有个iOS开发同学昨天在群里面提了一个问题,如果一个人下载了一个APP,该APP与服务器是HTTPS连接,他不会信任任何来源于不明身份的证书,然后连上了我的WIFI,我有没有办法去破解里面的通信内容?

接下来我们就带着这个疑问去寻找答案,并且给出我的答案。

什么是HTTP

HTTP(HyperText Transfer Protocol)超文本传输协议,HTTP是七层网络模型中作用在应用层的协议。

阅读全文 »

回文数

发表于 2018-08-10 | 分类于 常见算法 | 0 Comments
字数统计: 564 | 阅读时长 ≈ 2

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

1
2
输入: 121
输出: true

示例 2:

1
2
3
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
阅读全文 »

持续集成之Jenkins构建项目并上传到蒲公英

发表于 2018-08-08 | 分类于 iOS 开发 | 0 Comments
字数统计: 2,758 | 阅读时长 ≈ 13

在第一篇Jenkins的搭建中我们已经把本地jenkins环境都搭建好了,接下来我们通过jenkins构建一个ipa并且上传到蒲公英。

创建任务

1.首先选择左侧的新建任务,然后下面是构建该工程的基本信息

阅读全文 »

持续集成之Jenkins搭建

发表于 2018-08-07 | 分类于 iOS 开发 | 0 Comments
字数统计: 1,446 | 阅读时长 ≈ 5

前言

对于一个APP来说,我相信我们开发最担心的就是出bug,只要是线上APP出bug,心里就慌得很,这是一件很严重的事情,还有可能让用户一气之下把你的APP删掉,从此再也不会出现在他的手机里面。

但是如果我们严格把控APP的质量,我们做到每天都构建一个版本并且测试,我们将这个APP上传到一个特定的测试系统,当有代码更新的时候或者每天设置一个时间去不断的跑测试,这样我们在开发阶段就发现很多问题。

上面我们说的就是CI(Continuous Integration)持续集成+TDD(Test Driven Development)测试驱动开发。

阅读全文 »

用队列实现栈和用栈实现队列

发表于 2018-08-03 | 分类于 常见算法 | 0 Comments
字数统计: 280 | 阅读时长 ≈ 2

用两个栈来实现队列,思路和用数组实现队列一样

阅读全文 »

swift实现栈和队列

发表于 2018-08-02 | 分类于 常见算法 | 0 Comments
字数统计: 276 | 阅读时长 ≈ 2

在swift中并没有内设的栈和队列,接下来我们通过数组来实现栈和队列

栈的实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
protocol Stack {
associatedtype Element
//是否为空
var isEmpty: Bool{ get }
//栈的大小
var Size: Int{ get }
//栈顶元素
var peek: Element? { get }
//入栈
mutating func push(_ newElement:Element)
//出栈
mutating func pop()->Element?
}

struct IntegerStack:Stack {
typealias Element = Int
private var stack = [Element]()
var isEmpty: Bool {return stack.isEmpty}
var Size: Int {return stack.count}
var peek: Int? {return stack.last}
mutating func push(_ newElement: Int) {
self.stack.append(newElement)
}
func pop() -> Int? {
return stack.last
}
}
阅读全文 »
123…5
lemon

lemon

iOS Developer | 拥抱变化 | 🍋😊

50 日志
5 分类
41 标签
RSS
GitHub E-Mail
© 2019 lemon