在块内的块中释放对象

时间:2011-09-03 04:36:59

标签: iphone objective-c ipad

实际上可以在块中执行以下操作。我不确定释放一个超出块范围的对象是否正常?在下面的示例中,venObject和newPoll是内部块范围之外的对象。

 [query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){
        PFObject * venObject;
        if (!error){
                venObject = [[PFObject alloc] initWithClassName:@"Venue"];
                [venObject setObject:self.venue.identification forKey:@"fid"];
            }

            PFObject * newPoll = [[PFObject alloc] initWithClassName:@"Poll"];

            [newPoll saveInBackgroundWithBlock:^(BOOL succeeded, NSError * error){
                if (succeeded){
                      [venObject release]; //is this fine?
                      [newPoll release]; //is this fine?
                }
            }];
        }

1 个答案:

答案 0 :(得分:0)

是的,尽管我发现autorelease你创建它们的同一范围内的对象更清晰,但它应该有效。

此外,您的代码有很多错误。如果error不是nilvenObject将是一个可以指向任何位置的未初始化指针。稍后在该指针上调用release可能会导致崩溃。如果保存失败,则不释放对象,从而造成内存泄漏。