use performSelector instead of objc_msgSend for stability