Static typed languages
are those in which type checking is done at compile-time, whereas dynamic typed languages are those in which type checking is done at run-time.
meaning that you don't have to tell the compiler what type of object you're working with at compile time. Declaring a type for a varible is merely a promise which can be broken at runtime if the code leaves room for such a thing. You can declare your variables as type id, which is suitable for any Objective-C object.