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

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

对于“ PhotoGallery”,我创建了一个新的Objective-C类作为“ NSObject”的子类,在该类中,我将所有不同的图像定位为UIButton。
然后,我添加了另一个功能,该功能描述了设备方向更改后所有图像的排列方式。和dealloc功能。就这样。

该类非常有用,并且在设备方向更改时也可以重新排列。问题是,如果我在ios-simulator中模拟了内存警告,则第一次正确地重新分配PhotoGallery,但是如果我再次模拟了警告,则会收到错误消息:“ [[PhotoGallery版本]:发送到已释放实例的消息” ”。

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

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

最佳答案

您可能没有将对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,向nil发送消息是安全的。

09-25 21:35