标签: observer-pattern

我何时应该删除观察员?在删除观察者之前释放对象的错误

我试图在我的一个类中使用键值观察.我在init方法中注册观察者并在dealloc中删除/注销它们,但是我得到了以下错误,这似乎是在调用dealloc方法之前发生的,根据我的调试打印.

正在释放类TekkPoint的实例0x583870,而键值观察者仍在其中注册.观察信息被泄露,甚至可能被错误地附加到其他物体上.在NSKVODeallocateBreak上设置断点以在调试器中停止.这是当前的观察信息:(上下文:0x0,属性:0x536400>上下文:0x0,属性:0x55aba0>)

有什么特别的方法可以删除观察者吗?或者也许是我应该删除它们的特定地方?

根据这个问题,我正在做正确的事情,但为什么我会收到此错误消息?

这是我的dealloc例程:

- (void)dealloc {
  // Remove all observers.
  for (NSString *path in [TekkPoint observedPaths]) {
    [self removeObserver:[option_ tChart]
          forKeyPath:path];

  }

  [description_ release];
  [weight_ release];
  [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

需要注意的一点是,我的实现可能很奇怪,我正在向观察者添加和删除观察者,这是否会导致我的问题?

objective-c key-value-observing cocoa-bindings observer-pattern

32
推荐指数
1
解决办法
2万
查看次数

在json中传递函数并执行

有没有办法可以将函数作为json字符串传递(使用JSON.stringify进行转换),将其发送到另一个函数,解析json然后执行json中的函数?我正在使用jquery和javascript.

javascript jquery json observer-pattern

32
推荐指数
4
解决办法
6万
查看次数

回调/命令与EventListener/Observer模式

我正在尝试设计一个异步框架,并想知道人们认为回调模式与观察者模式的优缺点.

Callback pattern:

//example callback
public interface Callback{
    public void notify(MethodResult result);
}

//example method
public class Worker{
  public void doAsyncWork(Callback callback){
     //do work
     callback.notify(result);
  }
}

//example observer pattern
public interface EventListener{
   public void notify(MethodResult result);

}

public class Worker{
  private EventListener listener;
  public registerEventListener(EventListener listener){
   this.listener=listener;
  }
  public void doAsyncWork(){
     //do work
     listener.notify(result);
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用一个似乎使用这两种模式的框架.EventListener模式不是典型模式,因为它没有监听器列表.这可以通过创建CompositeListener来轻松实现,CompositeListener在侦听器的优先级上有自己的语义,以及如何处理事件到每个侦听器的分布,例如为每个侦听器和串行通知生成新线程.(我实际上认为这是一个好主意,因为它是一个很好的关注点分离,并且是对标准观察者/监听器模式的改进).

你何时应该使用它们?

Thxs.

design-patterns asynchronous callback command-pattern observer-pattern

30
推荐指数
3
解决办法
2万
查看次数

Rx for .NET - Scheduler.Dispatcher发生了什么?

我正在努力完成关于PluralSight的Dan Sullivan的Rx Extensions培训课程.这是非常好的东西但不幸的是Rx似乎已经被改变了,尽管该课程仅在一个月前发布.

大多数变化都很容易解决(从三个dll变为单个dll,更改使用的命名空间等)但我很难理解我应该用什么来代替Dan的例子中的Scheduler.Dispatcher.我在调度程序中可用的属性中看不到任何明显的内容.

这是我正在尝试使用(重构的?)Rx库(当前稳定版本v1.0.10605)的代码

var query = from number in Enumerable.Range(1, 25) select StringWait(number.ToString());
var observableQuery = query.ToObservable(Scheduler.ThreadPool);
observableQuery.ObserveOn(Scheduler**.Dispatcher**).Subscribe(n => Results.AppendText(string.Format("{0}\n", n)));
Run Code Online (Sandbox Code Playgroud)

我应该使用什么来调用原始Dispatcher线程上的Observer代码(Results.AppendText)?

.net wpf design-patterns system.reactive observer-pattern

29
推荐指数
1
解决办法
6164
查看次数

Android Rxjava订阅了变量

我正在学习观察者模式,我希望我的观察者在改变它的值并做一些操作时跟踪某个变量,我做了类似的事情:

public class Test extends MyChildActivity {

   private int VARIABLE_TO_OBSERVE = 0;

   Observable<Integer> mObservable = Observable.just(VARIABLE_TO_OBSERVE);  

   protected void onCreate() {/*onCreate method*/
       super();
       setContentView();
       method();
       changeVariable();
   }

   public void changeVariable() {
       VARIABLE_TO_OBSERVE = 1;
   }

   public void method() {
       mObservable.map(value -> {
            if (value == 1) doMethod2();
            return String.valueOf(value);
       }).subScribe(string -> System.out.println(string));
   }

   public void doMethod2() {/*Do additional operations*/}

}
Run Code Online (Sandbox Code Playgroud)

但doMethod2()不会被调用

android observer-pattern rx-java

28
推荐指数
3
解决办法
3万
查看次数

如何在java中创建自定义监听器?

我想知道如何在java中设置我们自己的监听器.例如,我有一个函数,将数字从1增加到100.我想在值达到50时设置一个监听器.我怎么能这样做?请教我任何教程.

java interface listener observer-pattern

27
推荐指数
2
解决办法
5万
查看次数

Rails 3 Observer - 希望学习如何为多个模型实现Observer

我想添加一个Auditor Observer,它可以随时为3个模型(书籍,角色,作者)创建一个动作...

我最近听说过Observer功能,但找不到有关该功能的任何文档.它是否支持Rails 3?

如何创建一个Auditor Observer,为3个模型执行after_create操作?

谢谢

ruby-on-rails observer-pattern ruby-on-rails-3

26
推荐指数
1
解决办法
2万
查看次数

在Angular 2中为模拟数据创建一个Observable

我试图从具有模拟数据的服务返回一个Observable.

我从我的服务中退回来了:

return Observable.of(new Object()).map(MOCKACCOUNT =>JSON.stringify(MOCKACCOUNT));
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

Observable_1.Observable.of不是一个函数.

我错过了一些包括?我正在进口

import {Observable} from "rxjs/Observable";
Run Code Online (Sandbox Code Playgroud)

注意:我之前返回了一个模拟承诺,但根据我的理解,我无法插值.例如{{returnFromServiceStoredInExportedClass.name}}

promise observer-pattern angular

25
推荐指数
2
解决办法
2万
查看次数

在PHP应用程序中实现插件的设计模式

关于如何在PHP应用程序中实现插件有共识吗?

我已经研究了接近的观察者模式,它实际上只是一个通知系统,并且不允许代码直接扩展应用程序.我目前正在使用我提出的简单钩子系统:

public function registerHook($hookName, array $params = array())
{
    $this->hooks[] = $hookName;

    foreach ( $this->plugins as $pluginName => $hooks ) {
        if ( in_array($hookName, $hooks) ) {
            $plugin = new $pluginName($this, $this->view, $this->controller);

            $plugin->{$hookName}($params);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这很适合我的目的,但我很好奇是否有一个经过多次测试和验证的设计模式,我只是重新发明了轮子.

php oop plugins design-patterns observer-pattern

24
推荐指数
1
解决办法
5913
查看次数

如何以纯粹的功能方式实现观察者设计模式?

假设我想使用OO编程语言实现事件总线.我可以这样做(伪代码):

class EventBus

    listeners = []

    public register(listener):
        listeners.add(listener)

    public unregister(listener):
        listeners.remove(listener)

    public fireEvent(event):
        for (listener in listeners):
            listener.on(event)
Run Code Online (Sandbox Code Playgroud)

这实际上是观察者模式,但用于应用程序的事件驱动控制流.

您将如何使用函数式编程语言(例如lisp风格之一)实现此模式?

我问这个是因为如果一个人不使用对象,人们仍然需要某种状态来维护所有听众的集合.此外,由于听众集合随着时间的推移而变化,因此无法创建纯粹的功能解决方案,对吧?

lisp scheme functional-programming clojure observer-pattern

23
推荐指数
4
解决办法
5635
查看次数