Iphone -[CALayer release]:发送到解除分配实例0xc60a690的消息

Iphone -[CALayer release]:发送到解除分配实例0xc60a690的消息,iphone,ios5,Iphone,Ios5,我认为这可能会导致错误,因为我在几个类中使用了button的layer属性。我想这可能是原因,但我不确定 现在,当我在一段时间(最多5分钟)后在iPod上运行应用程序时,应用程序会崩溃,并显示以下错误消息: -[CALayer release]: message sent to deallocated instance 0xc60a690 如何解决此问题?我认为您没有在viewDidLoad方法中保留按钮,这就是为什么过了一段时间后它们会取消分配。只需在分配对象的末尾添加retain或将其写入

我认为这可能会导致错误,因为我在几个类中使用了button的layer属性。我想这可能是原因,但我不确定

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

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

如何解决此问题?

我认为您没有在viewDidLoad方法中保留按钮,这就是为什么过了一段时间后它们会取消分配。只需在分配对象的末尾添加retain或将其写入@property..

您会收到错误,因为对象已被解除分配,您正试图向其发送消息

如果没有看到您的代码,就很难说出您需要做什么来修复问题

我建议你仔细阅读objective-c中关于内存管理的内容。比如说,


但是还有很多其他的相关文件。如果你不理解这些概念,那么你将来会遇到很多问题。

如果你想在当前视图中删除类self,并且它已经让IBOutlets连接到删除的视图,你确实需要将IBOutlets设置为nil,它仍然适用于我,如下所示:

-(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]; } -(void)backRootController{ //我想在self.tabBarController上将当前viewController更改为rootViewController。 RootViewController*_RootViewController=[[RootViewController alloc]init]; NSArray*_viewControllers=self.tabBarController.viewControllers; NSMutableArray*_tabs=[NSMutableArray]; 用于(UIViewController*_选项卡ViewController in _ViewController){ 如果(_tabViewController==self){ _rootViewController.tabBarItem=\u tabViewController.tabBarItem; _tabViewController=\u rootViewController; } [[u tabs addObject:[u tabViewController]; } self.tabBarController.viewControllers=[NSArray arrayWithArray:_tabs]; //将IBOutlets设置为零以避免[CALayer release]崩溃。(UILabel、UIView、UIImageView) self.outPreviewLabel=nil; self.outPreviewView=nil; self.outPreviewImageView.image=nil; self.outPreviewImageView=nil; //然后卸下视图并更换当前控制器。 [self.view removeFromSuperview]; [自移除自父视图控制器]; [_rootViewController发布]; }
发布更多代码。。您是如何分配CALayer实例的?或者您可能了解了内存管理的正确用法,而不是将retain分散到任何地方,即使它不合适。我不是这样说的,您将retain放在任何地方…查看Apple文档,然后告诉我我是对的还是错的…当您在.h类中声明任何变量时,你必须添加它的属性,但没有人使用它,然后面临这样的问题……你的回答是“只需在分配它的末尾添加retain”。在分配对象时保留它并不总是合适的。我认为您需要先再次阅读Apple内存管理文档。例如,如果从方法返回对象,则不会保留它,但会自动释放它。同样,如果您写入@property,您并不总是希望在其中保留一个retain,您可能需要一个副本。但是,如果任何主体未写入@property,并且在运行时,其任何对象被释放和app get应用程序因以下错误消息而崩溃:--[CALayer release]:消息已发送到解除分配的实例0xc60a690他需要什么读取内存管理或回答…请正确查看我的回答我在此处添加了两种情况,而不是告诉他只写保留任何位置。。。。