Re: Fundamental mistake in my understanding of use of classes/instances/encapsulation/messaging
Re: Fundamental mistake in my understanding of use of classes/instances/encapsulation/messaging
- Subject: Re: Fundamental mistake in my understanding of use of classes/instances/encapsulation/messaging
- From: Nathan Kinsinger <email@hidden>
- Date: Sat, 21 Jun 2008 02:43:45 -0600
On Jun 20, 2008, at 6:48 AM, Jason Wiggins wrote:
Hi everyone,
<snip>
Any help would be greatly appreciated.
Jason
Some pointers,
1) As has been stated already you don't need the View object at all.
In this case the Window holds your view (if you look at the Nib in
outline mode and open the content triangle for the Window object you
will see that it has a Content View which holds your NSButton and
NSPopUpButton).
2) You don't need the Model object in the NIB. The Controller object
creates a model instance in it's -awakeFromNib method. The objects you
add to the Nib are instantiated when the Nib is loaded so there ends
up being two Model objects and the one in the Nib is just wasting
memory since nothing else refers to it.
With the exception of the first three items (File's Owner, First
Responder and Application) the objects in the Nib are objects that
will be created when it loads. In your example the MainMenu, Window,
Font Manager and your Controller are all objects that are instantiated
when the app runs. You don't need to add objects/classes to the Nib
just because they are in your app, only if you need/want to have them
created for you. The Controller should be in the Nib in this case, you
need it to be created in order to create the Model object and to
interact with the view objects already in the Nib.
3) You should add a dealloc method to your Model object, it should
release the dataString ivar. Read up on memory managment:
http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Concepts/ObjectOwnership.html#/
/apple_ref/doc/uid/20000043
In other memory management issues, the setDataString: method of Model
needs to properly release the old string object before overwriting
with the new string, otherwise you are leaking memory by not releasing
the old string (you should check that the new string is not the same
string object as the old one first). Read up on accessor methods:
http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAccessorMethods.html#/
/apple_ref/doc/uid/TP40003539
4) Just some things to think about/try. You don't need the button to
read the popup's value, you can set an action to the NSPopUpButton in
the same way that you did for the NSButton, then when the user selects
an item the method is called right then. Try creating a new IBAction
method for the popup and in it set a different value to the dataString
of modelInstance for each menu item in the popup. This more directly
models the behavior of a controller, that is it changes the model
based on user input. Maybe add an NSTextField to the window and when
the Model changes it's dataString it tells the Controller which then
updates the text field. Now you have a controller changing the view
based on changes in the model.
Good luck and have fun :)
--Nathan
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden