问题
The documentation says:
- (void)reset
Returns the receiver to its base state.
Discussion
All the receiver's managed objects are “forgotten.” If you use this method, you should ensure that you also discard references to any managed objects fetched using the receiver, since they will be invalid afterwards.
- (void)rollback
Removes everything from the undo stack, discards all insertions and deletions, and restores updated objects to their last committed values.
Discussion
This method does not refetch data from the persistent store or stores.
It seems that after I make some change to my context, calling these two method will do exactly the same thing: discard changes and restore updated objects to their last committed values. So what does -reset
actually do?
回答1:
The key part is in the quote
All the receiver's managed objects are “forgotten”.
- (void)reset;
will give you a clean NSManagedObjectContext
with no objects in it and as the docs state any NSManagedObject
's you have around should be discarded as they are no longer valid.
- (void)rollback
will just restore the NSManagedObject
's to their persisted values
回答2:
-reset
is different than -rollback
in that it invalidates any NSManagedObject
s that have been fetched from the context. Attempting to use those objects can be expected to throw an exception. However -rollback
simply discards unsaved changes.
来源:https://stackoverflow.com/questions/8319926/whats-the-difference-between-nsmanagedobjectcontext-reset-and-rollback