幸运四叶草

相思形色露,欲掩不从心。


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

iOS开发 - +load 和 +initialize 方法

发表于 2019-10-15 | 分类于 iOS开发 | 阅读次数:
字数统计: 2k | 阅读时长 ≈ 8

概述

  Objective-C作为一门面向对象的开发语言,有类和对象的概念。编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用。在应用程序运行起来的时候,类的信息会有加载和初始化的过程。
  就像Application有生命周期回调方法一样,在Objective-C的类被加载和初始化的时候,也可以收到方法回到,可以在适当的情况下做一些定制处理。而这正是load和initialize方法可以帮我们做到的。

1
2
+ (void)load;
+ (void)initialize;

阅读全文 »

iOS开发 - 分享一个关于KVO的扩展

发表于 2019-10-15 | 分类于 iOS开发 | 阅读次数:
字数统计: 561 | 阅读时长 ≈ 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
28
29
30
31
32
33
34
35
36
typealias KVONotificationBlock = (Any?, _ oldValue: Any?, _ value: Any?) -> Void

extension NSObject {
//默认的函数,option的初始值是Initial|New, 监测打变化的值默认转到主线程
func observe(_ object: Any?, keyPath: String, block: @escaping KVONotificationBlock) {
self.kvoController.observe(object, keyPath: keyPath, options:[.initial, .new], block:{(observer: Any?, object: Any, change: [String: Any]) in
DispatchQueue.main.async(execute: { () -> Void in
block(observer, change["old"], change["new"]);
})
})
}

func observe(_ object: Any?, keyPath: String, options: NSKeyValueObservingOptions, mainThread: Bool, block: @escaping KVONotificationBlock) {
self.kvoController.observe(object, keyPath: keyPath, options: options) { (observer, object, change: [String: Any]) -> Void in
if !mainThread || Thread.isMainThread == true {
block(observer, change["old"], change["new"]);
} else {
DispatchQueue.main.async(execute: { () -> Void in
block(observer, change["old"], change["new"]);
})
}
}
}

func removeObserve(_ object: Any?, path: String) {
self.kvoController.unobserve(object, keyPath: path);
}

func removeObserve(_ obj: Any?) {
self.kvoController.unobserve(obj);
}

func removeAll() {
self.kvoController.unobserveAll();
}
}
阅读全文 »

iOS开发 - 底层解析weak的实现原理

发表于 2019-10-15 | 分类于 iOS开发 | 阅读次数:
字数统计: 2.6k | 阅读时长 ≈ 10

前言

  很少有人知道weak表其实是一个hash(哈希)表,key是所指对象的地址,value是weak指针的地址数组。大多数人只知道weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被置为nil。通常用于解决循环引用问题。但现在单知道这些已经不足以应对面试了,很多公司都会问weak的原理。weak的原理是什么?下面就分析一下weak的原理。

阅读全文 »

iOS开发 - NSNotification和线程相关

发表于 2019-10-15 | 分类于 iOS开发 | 阅读次数:
字数统计: 1.3k | 阅读时长 ≈ 5

问题的开始

  我们都知道NSNotification是线程同步的,但有时却很容易忽视线程同步这个特性带来的问题。比如举下面的例子:

阅读全文 »

iOS开发 - NSNotification原理理解

发表于 2019-10-15 | 分类于 iOS开发 | 阅读次数:
字数统计: 2.7k | 阅读时长 ≈ 9

概念

  NSNotification是iOS中一个调度消息通知的类,采用单例设计模式,在开发中实现传值、回调等。在iOS中,NSNotification是使用观察者模式来实现用于跨层传递消息。

阅读全文 »
1234…10
kim逸云

kim逸云

笑而不语是一种豁达,痛而不言是一种修养。

47 日志
7 分类
32 标签
GitHub E-Mail
© 2020 kim逸云
本站访客数: |
博客全站共77.8k字
0%