我想写一些像苹果原版“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.
答案 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发送消息是安全的。