added weakSelf if nil check