On Dec 8, 2009, at 6:42 PM, David Duncan wrote:

> More than likely this is a memory management problem. Specifically, you 
> probably aren't claiming ownership of the NSData object that you store in 
> your instance variable, and thus it is being deallocated out from under you.

I was under the impression that automatic garbage collection was used in Mac OS 
X 10.5 and over, so retaining and releasing objects was handled automatically?

This is the initializer method of my Mesh class (I'm using OpenCTM library for 
importing triangle meshes):

- (id)initWithContentsOfFile:(NSString *)path
{
        self = [super init];
        if (self) {
                // Create an OpenCTM context and load the mesh from disk.
                CTMcontext context = ctmNewContext(CTM_IMPORT);
                ctmLoad(context, [path UTF8String]);
                
                // Check OpenCTM errors.
                CTMenum error = ctmGetError(context);           
                if (error != CTM_NONE) {
                        NSLog(@"OpenCTM error while opening %@: %s (%d)", path, 
ctmErrorString(error), error);
                        ctmFreeContext(context);
                        [self dealloc];
                        return nil;
                }
                
                // Store the geometry arrays.
                _vertices = [NSData dataWithBytes:ctmGetFloatArray(context, 
CTM_VERTICES)
                                                                   
length:ctmGetInteger(context, CTM_VERTEX_COUNT) * sizeof(CTMfloat[3])];
                
                _indices = [NSData dataWithBytes:ctmGetIntegerArray(context, 
CTM_INDICES)
                                                                  
length:ctmGetInteger(context, CTM_TRIANGLE_COUNT) * sizeof(CTMuint[3])];
                
                // Calculate the bounding sphere radius.
                for (CTMuint i = 0; i < ctmGetInteger(context, 
CTM_VERTEX_COUNT) * 3; i += 3) {
                        const CTMfloat x = ctmGetFloatArray(context, 
CTM_VERTICES)[i + 0];
                        const CTMfloat y = ctmGetFloatArray(context, 
CTM_VERTICES)[i + 1];
                        const CTMfloat z = ctmGetFloatArray(context, 
CTM_VERTICES)[i + 2];
                        
                        _radius = MAX(sqrt(x*x + y*y + z*z), _radius);
                }
                
                // Release the OpenCTM context.
                ctmFreeContext(context);
        }
        return self;
}


> --
> David Duncan
> Apple DTS Animation and Printing
> 


Regards,
Henri Häkkinen

_______________________________________________

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