了解Telegram iOS开源ASWatcher& ASHandle对象

时间:2014-12-09 14:59:30

标签: ios telegram

感谢Telegram开源代码,我试图像电报员那样学习我的应用程序的良好行为。

像这里:http://telegram.org/resources/telegram_iphone.src.zip

有趣的2个对象我注意到主要用于对象ASWatcher& ASHandle。 我试图了解它究竟应该做些什么。 我试着写几个日志并按照方法。 到目前为止,我理解的是那些对象在UIViewController上观察项目并跟踪更改,并从对象返回对象和新值。

我不知道我是对还是错,但它在我看来是一种非常有趣的方法或要学习的对象。 如果有人知道,我很乐意在这里提供帮助。

1 个答案:

答案 0 :(得分:1)

我知道答案为时已晚,但对于可能仍然感兴趣的人来说:

ASWatcher和ASHandle是 Actor模型的实现,即:

  

处理并发的概念模型   计算。它为系统的运行方式定义了一些一般规则   组件应该表现并相互交互

使用此模型的最著名的语言可能是 Erlang

演员是计算的原始单位。接收消息并根据消息进行某种计算的东西

这个想法与我们在面向对象语言中的想法非常相似:一个对象接收一条消息(一个方法调用),并根据接收到的消息(我们正在调用哪种方法)执行某些操作。 主要区别在于参与者之间是完全隔离的,并且它们永远不会共享内存。还值得注意的是,一个演员可以维持一个私有状态,永远不能被另一个演员直接更改

重要的是要理解,尽管多个角色可以同时运行,但是一个角色将顺序处理给定的消息。这意味着,如果您向同一演员发送3条消息,则一次只会执行一条。要同时执行这3条消息,您需要创建3个actor并向每个actor发送一条消息。

您可以在 ASHandle 的电报代码中看到:

- (void)reset
{
    TG_SYNCHRONIZED_BEGIN(_delegate);
    _delegate = nil;
    TG_SYNCHRONIZED_END(_delegate);
}

- (bool)hasDelegate
{
    bool result = false;

    TG_SYNCHRONIZED_BEGIN(_delegate);
    result = _delegate != nil;
    TG_SYNCHRONIZED_END(_delegate);

    return result;
}

进一步阅读:Wikipediathis