index.uts 1.7 KB
Newer Older
1 2
import { NotificationCenter } from 'Foundation';
import { UIApplication } from "UIKit"
3
import { Selector } from "ObjectiveC"
4
import { OnMemoryWarning, OffMemoryWarning } from "../interface.uts"
5 6

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

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

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