On Jun 15, 2009, at 11:28 PM, Graham Cox wrote:

On 16/06/2009, at 1:55 PM, Paul M wrote:
Also: do I need to track and clean up all these wrapper instanes? I'm assuming I dont - I hope I dont otherwise it'll be a complete nightmare.
You need to follow normal, standard memory management and object  
ownership rules. That doesn't necessarily involve "tracking" all the  
wrapper instances, but it doesn't let you off following the rules  
correctly. In this case, autoreleasing the objects when they are  
created is probably all you need to do (and +[NSValue  
valueWihtPointer:] does this anyway).
Actually, I believe a data source has stricter requirements on it than  
merely following the memory management rules.
From <http://developer.apple.com/documentation/Cocoa/Conceptual/OutlineView/Articles/UsingOutlineDataSource.html#//apple_ref/doc/uid/20000725-140686 
>:
"Similarly, [the outline view] does not own the objects it gets from  
the data source—if they are released your application is likely to  
crash unless you tell the outline view to reload its data.  ...  The  
data source is ... responsible for retaining all of the objects it  
provides to an outline view, and updating the outline view when  
there’s a change to the model. It is therefore not safe to release  
the root item—or any children—until you’re no longer displaying  
it in the outline view. If you need to dispose of the root item, then  
you should ensure that references to it are nullified, and that the  
outline view is updated to ensure that no attempt is made to display  
other items that may also have been disposed of ... ."

Also, note the following from the description of - outlineView:child:ofItem:
"In order for the collapsed state of the outline view to remain  
consistent when it is reloaded you must always return the same object  
for a specified child and item. "
And similarly, from the description of - 
outlineView:objectValueForTableColumn:byItem:
"In order for the collapsed state of the outline view to remain  
consistent when it is reloaded you must always return the same object  
for the specified item."

I think there's no getting away from the need for the data source to maintain all of the objects it vends. It can allocate them lazily, on demand. The object can be owned by the C++ object, or there can be a mapping from each C++ object to the corresponding Objective-C object, or you can maintain an Objective-C data structure that parallels the C+ + data structure.
Regards,
Ken

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to