2012-04-11 87 views
1

我认为它可能会导致错误,因为我在几个类中使用了按钮的图层属性。我认为这可能是原因,但我不确定。- [CALayer发布]:发送到释放实例的消息0xc60a690

现在,当我在某个时间(最长5分钟)后运行我的iPod上的应用程序的应用崩溃,并显示以下错误消息:

-[CALayer release]: message sent to deallocated instance 0xc60a690 

我该如何解决这个问题?

+3

发表一些更多的代码..你是如何分配CALayer实例的? – Ilanchezhian 2012-04-11 10:42:16

回答

-4

我认为你没有保留你的按钮在你的viewDidLoad方法,这就是为什么一段时间后他们释放。只需在您分配的末尾添加retain或将其写入@property ..

+4

或者也许学习内存管理的正确用法,而不是将分散的内容散布在任何地方,即使它不合适。 – 2012-04-11 10:47:35

+0

我不是那么说你把保留无处不在...检查苹果文件,然后告诉我即时通讯对或错....当你在.h类声明任何变量,你必须添加它的属性,但没有人使用它然后面临这样的问题...... – 2012-04-11 10:54:36

+1

你的答案是“只需在你分配的末尾添加保留”。在分配对象时保留对象并不总是合适的。我想你需要先阅读Apple内存管理文档。例如,如果你从一个方法中返回一个对象,那么你不会保留它,但是你会自动释放它。同样,如果您编写@property,您并不总是希望在那里保留 - 您可能需要一份副本。 – 2012-04-11 11:00:22

0

您收到错误消息,因为对象已被释放,并且您试图向其发送消息。

没有看到你的代码,很难说你需要做什么才能解决问题。

我建议你阅读Objective-C中的内存管理。例如,

Apple Documentation for Memory Management

但也有很多关于它的其他文件。如果你不了解这些概念,那么你将来会遇到很多问题。

0

如果你想删除当前视图类的自我,它必须有IBOutlets与你并需要设置IBOutlets至零删除的视图连接,但它仍然对我的作品,就像这样:

 
-(void)backRootController{ 
    //I wanna change the current viewController to rootViewController on self.tabBarController. 
    RootViewController *_rootViewController = [[RootViewController alloc] init]; 
    NSArray *_viewControllers = self.tabBarController.viewControllers; 
    NSMutableArray *_tabs  = [NSMutableArray array]; 
    for(UIViewController *_tabViewController in _viewControllers){ 
     if(_tabViewController == self){ 
      _rootViewController.tabBarItem = _tabViewController.tabBarItem; 
      _tabViewController = _rootViewController; 
     } 
     [_tabs addObject:_tabViewController]; 
    } 
    self.tabBarController.viewControllers = [NSArray arrayWithArray:_tabs]; 

    //To setup the IBOutlets to nil to avoid [CALayer release] crash. (UILabel, UIView, UIImageView) 
    self.outPreviewLabel   = nil; 
    self.outPreviewView   = nil; 
    self.outPreviewImageView.image = nil; 
    self.outPreviewImageView  = nil; 

    //Then remove the view and exchanged current controller. 
    [self.view removeFromSuperview]; 
    [self removeFromParentViewController]; 
    [_rootViewController release]; 
} 
相关问题