fix bug: when push object to vector, the retain method of the object will be call automatically
add refactor