在iOS中有几种方法来解决多线程访问同一个内存地址的互斥同步问题:
方法一 @synchronized(id anObject)
会自动对参数对象加锁,保证临界区内的代码线程安全
@synchronized(self)
{
// 这段代码对其他 @synchronized(self) 都是互斥的
// self 指向同一个对象
}
继续阅读 »
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 3. This.
翻译过程参考了现有的中文翻译,学习 ECMAScript 是一个非常抽象的过程,因为很多概念都是通过抽象的方式来解释的,作者尝试尽量用一些简单的方式并使用了一些具体图表,来使我们的学习曲线稍微平稳一点。
概述
本文将讨论和执行上下文密切相关的更多细节 - this 关键字。
实践证明,这个主题很难,在不同的执行上下文中确定 this 的值经常会发生问题。
许多程序员习惯性地讲 this 和面向对象编程密切联系在一起,this 指向了构造函数中新创建的对象。在 ECMAScript 中,这样
继续阅读 »
简介
对于编程来说,对事物的抽象是一个老生常谈的话题,抽象问题更利于面向对象编程以及程序设计模式。
和C/C++,Java,Python等语言一样,PHP也支持面向对象,但是又有略微区别,如PHP支持在接口中定义常量,但是不支持抽象变量。
抽象/Abstraction
对事物的抽象是指,区别两个不同事物之间的本质特征,这两个事物应该在某个视角上有明确的区分界限。
如,鲸鱼和鲤鱼,这两个事物在动物的视角上,有明确的区分界限,属于不同的动物;但是在水生动物的视角上,他们属于同一种动物的抽象。
合理的对问题进行抽象,构造模型,将更容易通过编程来解决问题。
记住:抽象是编程解决问题的基础,越复杂的问题,越需要一开始就对问
继续阅读 »
简介
俗话说,“PHP是世界上最好的语言”,因为PHP什么都能干。但是在PHP编程中,你是否会遇到这样的困惑:明明是相同的需求,但是之前写的代码却并不能重用,稍微修改不满足需求,大改又会让页面变样。
是的,由于PHP什么都能干,但是高度灵活性降低了代码的结构性。虽然可以利用三方框架来解决问题,但问题的根本在于缺乏设计模式。
本系列文章将由浅入深的介绍各种设计模式。
面向对象编程
面向对象编程,Object-Oriented Programming(OOP)作为最基本的设计模式并不是什么新鲜的话题,但是大部分新手的PHP编程都是在写流水账,各种拼接字符串,所以这里还是要提一下。
Object-Oriented Pro
继续阅读 »
这篇博客我会尽量以白话文的方式来描述问题和解决思路。
问题
Swift 支持多 region 部署,并且 object 的多个副本存储在不同的 region 以提高可用性。一般场景下,用户通常只在一个 region 上传和下载对象文件,只有当 region 出现故障时(比如网络瘫痪)才会到另一个 region 读取副本数据。而且对数据存储要求比较严格的企业(特别是政府部门),确实会对数据的副本数和存储位置有严格的要求,所以提供对象存储的云服务厂商,一般都采取多 region 部署方案。
继续阅读 »
有些时候你的项目中难免需要一些全局唯一的对象,这些对象大多是一些工具性的东西,在Python中实现单例模式并不是什么难事。以下总结几种方法:
使用类装饰器
使用装饰器实现单例类的时候,类本身并不知道自己是单例的,所以写代码的人可以不care这个,只要正常写自己的类的实现就可以,类的单例有装饰器保证。
def singleton(cls):
instances = {}
def _wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
r
继续阅读 »
从F版本就开始熟悉OpenStack的代码,到现在几大核心模块的代码基本都精读过,但不得不说,目前Heat的代码编写,应该是用到Python高级语法最多的模块,各种对象建模也比其他几个模块复杂一些,初学时比较吃力。这里记录下来,给自己和感兴趣的人参考。
版本:Icehouse
Dependencies
__iadd__:接受一个 (requirer, required) 元组,进行加法操作
required_by(self, last):返回依赖该资源的所有资源
__getitem__(self, last):返回一个Dependencies对象。以last作为叶子节点。
graph(self, revers
继续阅读 »
写在前面
Module模式最初被定义为一种在传统软件工程中为类提供私有和公有封装的方法。而在Javascript中,Module模式用于进一步模拟类的概念,通过这种方式,能够使一个单独的对象拥有公有/私有的方法和变量,从而屏蔽来自全局作用域的特殊部分。产生的结果是:函数名与在页面上其他脚本定义的函数冲突的可能性降低。
应当注意的一点是:在Javascript没有private访问修饰符因此算不得真正的私有,而是通过函数作用域来模拟私有这个概念。在Module模式内由于闭包的存在,声明的变量和方法只在该模式内部可用,但在返回对象上定义的变量和方法是可以对外访问的。
more
示例
var testModule=(functi
继续阅读 »
1、面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。
2、策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
继续阅读 »
PyObject
CPython 中基本的数据结构是 Object,所有的 Python 对象都可以用PyObject *来访问,CPython 中通过 Object 手动实现了对象系统。
PyObject 定义于 include/object.h 中,可以看到,结构体里只是一个简单的 PyObject_HEAD 宏。
继续阅读 »