CocoaUser
CocoaUser

Reputation: 1429

How to release a NSManagedObject object?

How to release a NSManagedObject object? When I deleted an object(NSManagedObject) in NSManagedObjectContext using - deleteObject: and than perform save action, But I do not see, It's released. DO I need to care about NSManagedObject Memory Management?

I am using the ARC in this project and the managed object overriding the dealloc method. the code looks like

I delete a managed object from context and then save indicate I don't need this managed object, If the context does not release it whether waste the memory?

Thanks in advance.

Upvotes: 2

Views: 950

Answers (2)

ChrisH
ChrisH

Reputation: 4558

Short answer - Core Data will manage the memory for NSManagedObject objects.

Longer answer - Even if Core Data has been told to delete the object from the context, you could still be retaining a reference to the (now invalid) object yourself somewhere, say in an array that contained your original fetched results, or maybe as a property. As you are using ARC those objects will eventually be released, and so will any reference they have to your object, but you might not see a dealloc right away when you call deleteObject: for this reason.

If you're not having performance or memory issues, I wouldn't worry too much about it. If you are then it might be worth taking a look at the refreshObject: mergeChanges: method of NSManagedObjectContext as a starting point.

Upvotes: 2

e1985
e1985

Reputation: 6279

In a typical scenario where you fetch a managed object from a context, then delete it and then save the context, you do not need to release the managed object as long as you are not sending retain to it, of course.

PS: If your question motivation is learning that's fine, but I would recommend you to move to ARC.

Upvotes: 0

Related Questions