only use retain for copys