dealloc

我们经常会在开发过程中遇到这样的问题:检测某个 ViewController 是否在 pop 后被释放。通常情况下,我们可以通过将项目中所有的 ViewController 继承自某个自定义的类,然后在该类中重写 dealloc 方法。另一种是更笨的办法:手动在我们需要检测的类中手动重写 dealloc 方法。

其实这两种方法都各有优劣,具体我就不想再分析了。实际上,除了上述两种办法,还有一种更好的办法来解决这样一个需求,就是我们标题所说到 Objective-C 中的 Runtime

Runtime 顾名思义就是运行时,由于 Objective-C 是一门动态语言,很多事情都不是放在编译而是运行时做的。具体的理论我就不再赘述,总之在这个需求中,Runtime 的特性能很好的满足我们的需求。

首先 创建一个 UIViewControllerCategory,在 Category 中重写 load方法,详细代码如下

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
+ (void)load {
[super load];

// 由于 ARC 中不允许手动调用 dealloc 方法,所以 originSEL 使用 NSSelectorFromString()来获取
SEL originSEL = NSSelectorFromString(@"dealloc");
SEL swapSEL = @selector(zecDealloc);

Method originMethod = class_getInstanceMethod(self, originSEL);
Method swapMethod = class_getInstanceMethod(self, swapSEL);

IMP originIMP = method_getImplementation(originMethod);
IMP swapIMP = method_getImplementation(swapMethod);

BOOL didAddMethod = class_addMethod(self, originSEL, swapIMP, method_getTypeEncoding(originMethod));

if(didAddMethod) {
class_replaceMethod(self, swapSEL, originIMP, method_getTypeEncoding(originMethod));
} else {
method_exchangeImplementations(originMethod, swapMethod);
}
}

- (void)zecDealloc {
NSLog(@"Dealloc ---- %@",[self class]);
}

这段代码的功能就是将系统的 dealloc 方法用重写的 zecDealloc 方法替代,而实现替换的主要功臣是 class_replaceMethod()method_exchangeImplementations() 两个 Runtime 方法,根据方法名,这两个方法的具体作用也很好理解。

RuntimeObjective-C 的一把双刃剑,我自己也会在以后的实际项目中慢慢学习和总结。

最近在公司的项目开发过程中遇到一个需求:获取系统日历内的事件,通过 ANCS 协议通知可穿戴设备,所以就找了官方的Demo看了一下。

首先,日历中所以的事件都是通过EKEventStore这个类来管理的,所有单独的事件都是一个个EKEvent对象,结合下面的数据和日历事件详情截图可获取对应的数据

Read More

应用预览的分辨率

设备 本机分辨率 横屏分辨率 竖屏分辨率
5系 1136 x 640(16:9) 1920 x 1080或1136 x 640 1080 x 1920或640 x 1136
iPad 2048 x 1536(4:3) 1200 x 900 900 x 1200
iPhone 6 1334 x 750 1334 x 750 750 x 1334
iPhone 6 Plus 2208 x 1242(渲染像素) 1920 x 1080(物理像素) 1920 x 1080 1080 X 1920

iPhone 4s及更早的4英寸设备无应用预览功能

App预览的特性

视频编码格式 H.264 ProRes 422 HQ only
比率 10~12Mbps 最大至 220Mbps的可变码率
视频特性 High Profile Level 4.0以上 ===
最大帧率 30fps 30fps
音频 立体声 / 256kbps AAC / 采样率:44.1kHz / 通用音轨 立体声 / Codec:PCM或256kbps AAC / 色位深度(PCM)16、24、32位 / 采样率44.1或48kHz / 通用音轨
格式 .mov / .m4v / .mp4 .mov
视频最大容量 500MB 500MB
视频最小时长 15秒 15秒
视频最大时长 30秒 30秒
视频支持方向 水平和竖直 水平和竖直

参考资料:https://developer.apple.com

开发篇

  • Alfred:说它是 Mac 下第一神器估计没什么人反对吧,我觉得任何解释对于它都是多余的,谁用谁知道。(£ 17 / License)
  • Dash:程序员查文档什么的最烦了,Dash正是一个把您从烦恼中解救出来的神器,没有您想不到的语言,只有您不会用的语言。($ 19.99 / License)
  • Kaleidoscope:代码比对合并软件,个人认为是 Mac 上 UI 最漂亮的代码比对合并软件。(Mac App Store:¥ 448)
  • Spark Inspector:UI 调试软件,可以将 app 的所有图层用 2D / 3D 的样式显示出来,方便调试 UI。($ 49.99 / License)
  • Mou:Mac 下的 markdown 编辑工具,支持实时浏览,可将文档导出为 HTML 和 PDF 格式。
  • GitHub:全球最大同性社交平台 / 全球最大的代码托管平台,只需要这两个头衔就够了。
  • Charles:网络调试工具,可以利用 Mac 共享 WiFi 网络给 iPhone / iPad,再通过 Charles 抓取 iPhone / iPad 的网络数据。
  • Jason:强大的 JSON 数据解析器,自动分析数据的类型,方便开发者进行网络数据解析。

Read More