Flash 上下文管理

Posted wt7018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flash 上下文管理相关的知识,希望对你有一定的参考价值。

1、Local()

作用:为每个协程或线程创建一个独立的内存空间

储存格式:

{
    唯一标识: {stack: []}
}

代码

try:
    from greenlet import getcurrent as get_ident
except:
    from threading import get_ident
class Local:
    __slots__ = (__storage__, __ident_func__)

    def __init__(self):
        # __storage__ = {1231:{‘stack‘:[]}}
        object.__setattr__(self, __storage__, {})
        object.__setattr__(self, __ident_func__, get_ident)

    def __getattr__(self, name):
        try:
            return self.__storage__[self.__ident_func__()][name]
        except KeyError:
            raise AttributeError(name)

    def __setattr__(self, name, value):
        ident = self.__ident_func__()
        storage = self.__storage__
        try:
            storage[ident][name] = value
        except KeyError:
            storage[ident] = {name: value}

    def __delattr__(self, name):
        try:
            del self.__storage__[self.__ident_func__()][name]
        except KeyError:
            raise AttributeError(name)

2、LocalStack()

作用:通过栈操作local中的列表,列表中可以储存对象

代码

class LocalStack:
    def __init__(self):
        self._local = Local()

    def push(self,value):
        rv = getattr(self._local, stack, None) # self._local.stack =>local.getattr
        if rv is None:
            self._local.stack = rv = [] #  self._local.stack =>local.setattr
        rv.append(value) # self._local.stack.append(666)
        return rv


    def pop(self):
        """Removes the topmost item from the stack, will return the
        old value or `None` if the stack was already empty.
        """
        stack = getattr(self._local, stack, None)
        if stack is None:
            return None
        elif len(stack) == 1:
            return stack[-1]
        else:
            return stack.pop()

    def top(self):
        try:
            return self._local.stack[-1]
        except (AttributeError, IndexError):
            return None

3、上下文源码分析(request session)

A  wsgi->app.__call__->wsgi_app->ctx = self.request_context(environ) environ初次封装后的数据
a  封装session request : request_context->RequestContext
b  执行push方法->_request_ctx_stack.push(self) ctx ->_request_ctx_stack = LocalStack()->Local()

 

以上是关于Flash 上下文管理的主要内容,如果未能解决你的问题,请参考以下文章

AsyncTask 和 FragmentManager 的问题

片段无法转换为上下文

使用带有actionscript 3 Flash cs6的矩形或线条创建2D重复模式

如何在android的片段中设置应用程序上下文?

片段未附加到上下文 - 延迟的 UI 更改

禁用上下文菜单 - Flash Professional 导出 (Flash 11.2 - CS6)