fix #2, add weak for delegate