写一个自己的iPad照相馆 - dealloc错误

时间:2011-01-05 23:24:19

标签: ios uiviewcontroller nsobject photo-gallery

我想写一些像苹果原版“Photos.app”的照相馆。 我在AppDelegate中创建了一个UITabbarcontroller,然后创建了一个“ImageViewController”和一个“VideoViewController”。

在“ImageViewController”中,我添加了一个UIScrollView,然后创建了一个我自己的“PhotoGallery”实例,它具有不同的属性,如imagePerRow,图像,填充等。

对于“PhotoGallery”,我创建了一个新的objective-c类作为“NSObject”的子类,我将所有不同的图像定位为UIButtons。 然后我添加了另一个功能,描述了设备方向改变后所有图像的排列。和dealloc功能。多数民众赞成。

这个类非常有用,也可以在设备方向改变时进行重新排列。问题是,如果我在ios模拟器中模拟内存警告,第一次PhotoGallery正确dealloc但是如果我再次模拟警告,我收到一条错误消息:“[PhotoGallery release]:消息发送到解除分配的实例”

我认为它是因为子类为NSObject,对吧? 然后我测试了它作为UIView。有同样的错误。所以知道我不知道该怎么做了。希望你明白这个问题是什么,你会给我一些提示...... 想想再次调用init函数?怎么样?需要“drawRect”?我不知道。

感谢您的时间和帮助, G.

1 个答案:

答案 0 :(得分:1)

您可能没有将包含对PhotoGallery的引用的属性设置为nil。

即。您将保留对已解除分配的实例的引用,并尝试在其上调用release

糟糕的例子:

- (void) didReceiveMemoryWarning
{
    [photoGallery release];
}

safe(r)示例:

- (void) didReceiveMemoryWarning
{
    [photoGallery release];
    photoGallery = nil;

    // or combine both actions if your property attributes are set up to accommodate it:
    // self.photoGallery = nil;
}

在错误的示例中,photoGallery仍保留对现已解除分配的实例的引用,第二个内存警告将尝试向其发送消息。

在safe(r)示例中,photoGallery为零,向nil发送消息是安全的。