Fix memory leak: convert to ARC and make delegate weak