0

我想写我自己的相册,就像来自苹果的原始“Photos.app”一样。我在 AppDelegate 中创建了一个 UITabbarcontroller,然后是一个“ImageViewController”和一个“VideoViewController”。

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

对于“PhotoGallery”,我创建了一个新的objective-c 类作为“NSObject”的子类,我将所有不同的图像定位为UIButtons。然后我添加了另一个函数,它描述了设备方向发生变化时所有图像的排列。和dealloc函数。就这样。

这个类很好用,当设备方向改变时也能重新排列。问题是,如果我在 ios-simulator 中模拟内存警告,PhotoGallery 第一次正确释放,但如果我再次模拟警告,我会收到错误消息:“[PhotoGallery release]: message sent to deallocated instance ”。

我认为它是因为子类为 NSObject,对吧?然后我将它作为 UIView 进行了测试。有同样的错误。所以知道我不知道该做什么了。希望您了解问题所在,并给我一些提示。考虑再次调用 init 函数吗?如何?需要“drawRect”吗?我不知道。

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

4

1 回答 1

1

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

IE。您保留对已释放实例的引用,并尝试调用release它。

不好的例子:

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

安全(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,向 nil 发送消息是安全的。

于 2011-01-05T23:47:01.767 回答