No reason to make delegate "assign" under ARC: taking advantage of weak
Adding another constructor that supports custom target/selector