Iphone objective-c内存管理:缓存视图元素
我正在编写一个图形化程度很高的应用程序,因此我试图在我的视图控制器中实现一种缓存机制,该机制只创建一次视图,并将其保留以备将来使用,类似于以下内容:Iphone objective-c内存管理:缓存视图元素,iphone,objective-c,cocoa,cocoa-touch,Iphone,Objective C,Cocoa,Cocoa Touch,我正在编写一个图形化程度很高的应用程序,因此我试图在我的视图控制器中实现一种缓存机制,该机制只创建一次视图,并将其保留以备将来使用,类似于以下内容: - (UIView *)logoView { if(_logoView == nil) { _logoView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"logo_header.png"]]; _logoView.cont
- (UIView *)logoView
{
if(_logoView == nil)
{
_logoView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"logo_header.png"]];
_logoView.contentMode = UIViewContentModeCenter;
}
return _logoView;
}
这一切都非常有效,然而,我对某个问题有点困惑;当我模拟内存警告时,我调用一个清除缓存的方法,如下所示:
- (void)purgeCachedContent
{
if(_logoView != nil)[_logoView release];
}
然而,这似乎导致了我的应用程序出现问题,因为它可能会被调用多次(dealloc、didReceiveMemoryWarning和viewDidUnload)
如何确定实例是否存在以向其发送发布消息?即使当我试图记录一个发布的视图时,我也会收到一个EXC_BAD_访问错误,所以我很难找到最好的方法。我甚至删除了if语句,希望能够发送nil objects消息,但这会导致相同的错误
我确信这是我的objective-c知识中缺少的东西。。。我只是不知道是什么 \u logoView不会仅仅通过释放它就自动设置为nil,因此您尝试使用该指针调用的任何未来方法都会转到一个内存位置,该内存位置以前包含有效对象,但现在包含垃圾。您可以通过设置
\u logoView=nil代码>释放后。如果要缓存它,为什么要释放它
只需在初始化时使用自动释放:
_logoView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @"logo_header.png"]] autorelease];