3

感谢 Telegram 开源代码,我正在努力为我的应用程序学习一个好的行为,就像 Telegram 的人一样。

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

有趣的 2 个对象,我注意到对象ASWatcher&的主要用途ASHandle。我试图了解它到底应该做什么。我尝试放置一些日志并遵循这些方法。到目前为止,我所理解的是那些对象观察项目UIViewController并跟踪更改,并从对象返回对象和新值。

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

4

1 回答 1

1

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

ASWatcher 和 ASHandle 是Actor Model的实现,它是:

处理并发计算的概念模型。它定义了一些关于系统组件应该如何表现和相互交互的一般规则

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

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

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

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

正如您在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;
}

进一步阅读:维基百科这个

于 2018-08-15T11:29:27.043 回答