I heard that Objective-C is influenced by the \"message passing mechanism\" of SmallTalk.
Objective-C, like Smalltalk, can use dynamic typing: an object
I figured out the reason finally..
It throw errors during compiling because -Werror flag is included, which will turn warning into error..
-Werror
http://clang.llvm.org/docs/UsersManual.html#cmdoption-Werror
After I delete -Werror flag, everything works as expected and the error only happens at run-time.