我想写我自己的相册,就像苹果原来的“Photos.app”一样。 我在 AppDelegate 中创建了一个 UITabbarcontroller,然后创建了一个“ImageViewController”和一个“VideoViewController”。
在“ImageViewController”中,我添加了一个 UIScrollView,然后创建了一个我自己的“PhotoGallery”实例,具有不同的属性,如 imagePerRow、图像、填充等。
对于“PhotoGallery”,我创建了一个新的 Objective-C 类作为“NSObject”的子类,其中我将所有不同的图像定位为 UIButton。 然后我添加了另一个函数,它描述了设备方向更改时所有图像的排列。以及 dealloc 函数。仅此而已。
这个类效果很好,当设备方向改变时也可以重新排列。问题是,如果我在 ios 模拟器中模拟内存警告,第一次 PhotoGallery 会正确释放,但如果我再次模拟警告,我会收到一条错误消息:“[PhotoGallery release]:消息发送到释放实例”。
我认为这是因为 NSObject 的子类,对吧? 然后我将它作为 UIView 进行了测试。有同样的错误。所以知道我不知道该怎么办了。希望您明白问题所在,并给我一些提示。 考虑再次调用 init 函数吗?如何?需要“drawRect”吗?我不知道。
感谢您的时间和帮助, G.
最佳答案
您可能没有将保存对 PhotoGallery 的引用的属性设置为 nil。
即。您保留对已释放实例的引用,并尝试对其调用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 发送消息是安全的。
关于ios - 编写自己的 iPad 照片库 - 释放错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610282/