index.uts 1.6 KB
Newer Older
1 2
import { NotificationCenter } from 'Foundation';
import { UIApplication } from "UIKit"
3
import { Selector } from "ObjectiveC"
4 5

class MemoryWarningTool {
6
	static listeners: UTSCallback[] = []
7
	
DCloud_iOS_XHY's avatar
DCloud_iOS_XHY 已提交
8
	// 监听内存警告
9
	static listenMemoryWarning(callback: UTSCallback) {
10
		
11 12 13 14 15 16 17 18
		// 只有首次才需要注册监听事件
		if (this.listeners.length == 0) {
			// 注册监听内存警告通知事件及设置回调方法
			// target-action 回调方法需要通过 Selector("方法名") 构建
			const method = Selector("receiveMemoryWarning")
			NotificationCenter.default.addObserver(this, selector = method, name = UIApplication.didReceiveMemoryWarningNotification, object = null)
		}
		this.listeners.push(callback)
19 20 21 22 23
	}
	
	// 内存警告回调的方法
	// target-action 的方法前需要添加 @objc 前缀
	@objc static receiveMemoryWarning() {
DCloud_iOS_XHY's avatar
DCloud_iOS_XHY 已提交
24
		// 触发回调
25 26 27
		this.listeners.forEach(listener => {
			listener({})
		})
28 29 30 31
	}
	
	// 移除监听事件
	static removeListen(callback: UTSCallback | null) {
32 33 34 35 36 37 38 39 40 41 42 43 44
		// 移除所有监听
		if (callback == null) {
			this.listeners = []
			// 移除监听事件
			NotificationCenter.default.removeObserver(this)
			return
		}
		
		// 清除指定回调
		const index = this.listeners.indexOf(callback!)
		if (index > -1) {
		    this.listeners.splice(index, 1)
		}
45 46 47 48
	}
}

// 开启监听内存警告
49
export function onMemoryWarning(callback: UTSCallback) {
50 51 52 53 54 55 56
	MemoryWarningTool.listenMemoryWarning(callback)
}

// 关闭监听内存警告
export function offMemoryWarning(callback: UTSCallback | null) {
	MemoryWarningTool.removeListen(callback)
}