I started programming in C++. Because of this, I was taught early on that for each definition, there should be a declaration. With member functions, it is a requirement.
Now that I have started learning Objective-C, I was somewhat "shocked" to find out that you don't need to pair them up. Obviously, if you don't define a method, it will not be called. If you don't declare a method, but define it, it will be called.
What's the rationale for allowing this type of ad-hoc definitions? Since I'm biased by C++, I find it annoying to read other people's code, as many times, the methods aren't declared. It's hard to get an overview of the class's interface.
I found a couple of answers here: Objective c: method relation .h and .m. Unfortunately they're not very conclusive.