为什么发布我的CoreData上下文/实体会导致我的应用崩溃?

Ric*_*evy 0 iphone cocoa-touch memory-management core-data objective-c

我有一个简单的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];
Run Code Online (Sandbox Code Playgroud)

该应用程序始终允许您将一个项目添加到列表中,但如果您尝试添加一个项目,则会崩溃.如果我删除"[newItem release];",该应用程序将允许您添加4个列表项,然后当您尝试输入第五个时突然崩溃.

只有删除方法末尾的所有三个发布语句时,应用程序才能正常工作.有谁能解释为什么?

Bol*_*ock 6

这些对象都是自动释放的(因为你alloc init什么都没有),所以你不应该自己释放它们.据我所知,当你的应用程序崩溃时,这是不可预测的,但它最终会崩溃.