adde __weak to prevent DDExpression retain cycle