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: Jason Wiggins <email@hidden>
- Date: Sat, 21 Jun 2008 19:16:07 +1000
Hi Nathan,
1. Noted with thanks.
2. I have realised that as it's not actually connected to anything in
the NIB. The only objects that need to instantiated in the NIB are
classes that require hooking up in IB?
3. This was a quick and dirty app to understand the popup button thing
and I knowingly disregarded memory management, but thanks for the
pointers nonetheless.
4. I will have a think and give these a go.
Regards,
Jason.
On 21/06/2008, at 6:43 PM, Nathan Kinsinger wrote:
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