Swift隐式可选类型的前世今生

一、什么是隐式可选类型

在介绍隐式可选类型之前,我们先看看什么可选类型。在Swift中可选类型用来处理值可能不存在的情况,可选类型的意思是值可能有,也可能没有。我们看一个例子:

1
2
3
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"

因为Int使用字符串的构造方法,可能成功也可能失败。比如字符串“Hello, world”就不能转换成Int。所以convertedNumber就是一个可选类型。当我们定义变量或常量时如果有值不存在的情况,使用可选类型。

Read on →

原理:创建一个动态库利用oc的runtime特性替换定位相关回调方法伪造GPS坐标,然后将动态库注入微信。

伪造GPS坐标

原理图:

fake

替换CLLocationManager的setDelegate:方法,将CLLocationManager的delegate替换为我们自定义的WMLocationProxy代理类,WMLocationProxy持有真正的CLLocationManager的delegate。

1
2
3
4
5
6
- (void)wm_setDelegate:(id)delegate {
    WMLocationProxy *proxy = [[WMLocationProxy alloc] init];
    proxy.oLMDelegate = delegate;
    self.proxy = proxy;
    [self wm_setDelegate:proxy];
}
Read on →

iOS使用Webview加载https网页

项目新的需求需要在客户端中嵌入网页,以前的项目中也做过类似的功能,感觉不会有什么困难,使用WebView加载指定的URL就行了。但这次我们需要加载https页面,由于没有相关的实战经验,在整个开发过程中踩了不少的坑,现在给大家分享一下。

Read on →

本文译自Swift官方博客,原文链接:Increasing Performance by Reducing Dynamic Dispatch

像其他编程语言一样Swift容许重载父类的方法和属性,这就意味着程序要在运行时去决定执行间接的方法调用和属性访问。这种技术被称之为动态绑定(关于动态绑定dynamic dispatch),这种间接的调用方式增加了语言的表现力但也会增加一定的运行时开销,在性能敏感的代码中这种开销是不可接受的。本文为大家展示使用final和private关键字以及全局模块优化(Whole Module Optimization)三种方式来减少动态绑定提高性能。

Read on →

应用程序的性能是衡量一个应用程序质量的重要指标,通常来说程序的性能是指程序对操作(包含用户操作)响应的快慢,也就是程序的流畅性。影响性能的因素有很多比如网络、I/O操作、图像文本绘制等等。本文所要探究的是关于绘制方面的内容,我们从最底层的像素绘制出发,了解底层绘制的基本原理来分析离屏渲染(Offscreen rendering)是怎么回事,离屏渲染是怎么影响性能的,如何解决离屏渲染产生的性能问题。

Read on →