diff --git a/uni_modules/uni-memorywarning/utssdk/app-ios/index.uts b/uni_modules/uni-memorywarning/utssdk/app-ios/index.uts index 2c95ce14c6e0b625373b6f58559bc75411ce16e2..e4dc943ebbcd8df81034a7b0ba4929f2a00b29be 100644 --- a/uni_modules/uni-memorywarning/utssdk/app-ios/index.uts +++ b/uni_modules/uni-memorywarning/utssdk/app-ios/index.uts @@ -3,35 +3,50 @@ import { UIApplication } from "UIKit" import { Selector } from "ObjectiveC" class MemoryWarningTool { - static listener: UTSCallback | null; + static listeners: UTSCallback[] = [] // 监听内存警告 - static listenMemoryWarning(callback: UTSCallback | null) { - this.listener = callback + static listenMemoryWarning(callback: UTSCallback) { - // 注册监听内存警告通知事件及设置回调方法 - // target-action 回调方法需要通过 Selector("方法名") 构建 - const method = Selector("receiveMemoryWarning") - NotificationCenter.default.addObserver(this, selector = method, name = UIApplication.didReceiveMemoryWarningNotification, object = null) + // 只有首次才需要注册监听事件 + 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) } // 内存警告回调的方法 // target-action 的方法前需要添加 @objc 前缀 @objc static receiveMemoryWarning() { // 触发回调 - this.listener?.({}) + this.listeners.forEach(listener => { + listener({}) + }) } // 移除监听事件 static removeListen(callback: UTSCallback | null) { - this.listener = null - NotificationCenter.default.removeObserver(this) - callback?.({}) + // 移除所有监听 + if (callback == null) { + this.listeners = [] + // 移除监听事件 + NotificationCenter.default.removeObserver(this) + return + } + + // 清除指定回调 + const index = this.listeners.indexOf(callback!) + if (index > -1) { + this.listeners.splice(index, 1) + } } } // 开启监听内存警告 -export function onMemoryWarning(callback: UTSCallback | null) { +export function onMemoryWarning(callback: UTSCallback) { MemoryWarningTool.listenMemoryWarning(callback) }