The apple docs actually explain MVC better than anything else I read. Basically the confusion related to MVC is because it is a compound pattern. It consists of many basic patterns. Although MVC was not discussed in Design Pattern by the Gang of four, the basic patterns were.
The main difference I think is that in
the Apple world the Controller is a
mediator pattern in addition to what
it normally is.
So unlike the traditional approach
models in Apple's world don't notify
views of change. They don't notify
anybody in fact. If you want to change
a model you have to do it through the
controller to make sure everybody is
notified of changes.
I think this approach is much better than the traditional one. It puts no constraints on the model objects. They don't have to implement any specific interface. They just have to solve domain specific problems. So you can very easily reuse them in other applications.
It is mainly the controller objects which have to be rewritten in this approach. Of course Apple changed that with bindings. But if you don't use bindings then Controllers is application specific.
Using Apple MVC in C++
I actually followed Apple's design when programming applications in C++ using Qt. Views are QWidget's. I put all code that has to do with appearance in a QWidget subclass. Then I make my controller a QObject subclass and have it create the view objects and connect signals from the QWidgets to slots in my QObject Controller. My model class is a regular class that don't inherit anything from Qt and implement the business logic. It gets modified by the controllers slots.
Alternatively the QWidgets can be created outside of the controller, so you can reuse the controller for other types of views.
Not sure if this helps anybody, but I think it is sometimes easier to think of Cocoa patterns in terms of C++, because we are used to getting pattern explained in terms of a statically typed language like C++ and Java.