Use of __weak makes it require iOS5+