我有一个简单的CoreData应用程序,它允许您将项目添加到列表中,显示在表格视图中。当用户键入新项时,将调用以下方法:
- (void)addNewItem:(NSString *)item
{
// Create a new instance of the entity managed by the fetched results controller.
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
Item *newItem = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
[newItem setName:item];
// Save the context.
NSError *error = nil;
if (![context save:&error])
{
//error handling code
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[context release];
[entity release];
[newItem release];
该应用程序始终允许您将一个项目添加到列表中,但如果您尝试添加一个项目,则会崩溃。如果我删除“[newItem release];”,该应用程序将允许您添加4个列表项,然后当您尝试输入第五个时突然崩溃。
只有删除方法末尾的所有三个发布语句后,该应用才能正常运行。任何人都可以解释原因吗?
答案 0 :(得分:6)
对象都是自动释放的(因为你永远不会alloc init
任何东西),所以你不应该自己释放它们。当你的应用程序崩溃时,我无法预测,但它最终会崩溃。
答案 1 :(得分:3)
只是为了澄清@ BoltClock的答案。它不仅仅是alloc
,init
,还有new...
,copy...
等。