关于注册了通知/监听 必须注销

An instance 0x15618e00 of class UITextView was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:
<NSKeyValueObservationInfo 0x159b3b70> (
<NSKeyValueObservance 0x159b3b30: Observer: 0x14c68c00, Key path: contentSize, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x159cab50>
)


我对UITextView进行了监听,却没有注销

注册了,一定要注销。还要判断是否存在,存在才注销,不存在不能对其进行没有的操作(有的本身没有判断是否存在的,可用一个变量去做判断,eg:bool,int)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 `ContentObserver` 监听 `Settings.Global` 特定 key 值变化的示例代码: ```java public class SettingsObserver extends ContentObserver { private Context mContext; private OnSettingsChangeListener mListener; public SettingsObserver(Context context, OnSettingsChangeListener listener) { super(null); mContext = context; mListener = listener; } @Override public void onChange(boolean selfChange, Uri uri) { if (mListener != null) { mListener.onSettingsChanged(); } } public void register() { mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.SOME_SETTING_KEY), true, this); } public void unregister() { mContext.getContentResolver().unregisterContentObserver(this); } public interface OnSettingsChangeListener { void onSettingsChanged(); } } ``` 在上面的代码中,我们创建了一个 `SettingsObserver` 类,它继承了 `ContentObserver` 类。我们通过传入 `Context` 和 `OnSettingsChangeListener` 接口来初始化 `SettingsObserver`。`OnSettingsChangeListener` 接口定义了当设置变化时要执行的回调函数。 `register()` 方法用于注册监听器,它使用 `getContentResolver().registerContentObserver()` 方法来注册一个 `ContentObserver`。我们传入了 `Settings.Global.getUriFor(Settings.Global.SOME_SETTING_KEY)` 作为监听的 URI,这将使监听器只接收 `SOME_SETTING_KEY` 的变化通知。设置 `true` 表示我们要监听子节点的变化。 `unregister()` 方法用于注销监听器,这里我们使用 `getContentResolver().unregisterContentObserver()` 方法来注销 `ContentObserver`。 在 `onChange()` 方法中,我们调用了 `OnSettingsChangeListener` 的回调函数,以便通知设置已经改变。 你需要将 `SettingsObserver` 对象创建并注册到你的 `Activity` 或 `Service` 中。例如: ```java public class MainActivity extends AppCompatActivity implements SettingsObserver.OnSettingsChangeListener { private SettingsObserver mSettingsObserver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSettingsObserver = new SettingsObserver(this, this); mSettingsObserver.register(); } @Override protected void onDestroy() { super.onDestroy(); mSettingsObserver.unregister(); } @Override public void onSettingsChanged() { // 处理设置变化 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值