use __AH_WEAK macro instead of __unsafe_unretained