Program received signal :"SIGKILL"

来源:互联网 发布:淘宝装修备份在哪 编辑:程序博客网 时间:2024/05/16 05:29

如果在-(void)dealloc{}方法中,用self.tableVIew=nil清空内存。那么会影响到-(void)viewDidLoad{}方法中的tableView(即[self.view addSubView:tableView]中的tableView),tableView事实上内存已经清空了,地址为:0x0

这个赶脚不对。因为明显就是先执行viewDidLoad方法,当退出该界面时才执行dealloc,所以感觉这个解释不能接受。所以这篇文章仅供大家参考,提供思路。

路过的大大们如果有神马高见,欢迎留言

发生Thread 1:Program received signal:"SIGKILL". 错误时内存管理不当。

举个例子:

-------------------------------------------------------------

MyViewController.h

@interface MyViewController : UIViewController{

      UITableView *tableView

}

@property (nonatomic,retain) UITableView *tableView;

@end

-----------------------------------------------------------------

MyViewContrller.m

@implementation

@synthesize: tableView

(void)viewDidLoad{

[super viewDidLoad];

tableView=[[UITableView alloc] init];

[self.view addSubView:tableView];

}

 

(void)dealloc{

[tableView release],self.tableView=nil;

[super dealloc];

}

------------------------------------------------------------------

如果你开了NSZombieEnabled,会有Thread 1:Program received signal:"SIGKILL".错误。

办法就是去掉self.

细看-(void)viewDidLoad{}和- (void)dealloc{}方法,里面都有tableView。

如果在-(void)dealloc{}方法中,用self.tableVIew=nil清空内存。

那么会影响到-(void)viewDidLoad{}方法中的tableView(即[self.view addSubView:tableView]中的tableView),tableView事实上内存已经清空了,地址为:0x0。

虽然retainCount≠0,但当执行-(void)dealloc{}方法中的[super dealloc]时,release或清空地址为:0x0的subView:tableView 就发生错误。

所以要去掉self.,在-(void)dealloc{}方法中,用tableVIew=nil清空内存,就不会影响到-(void)viewDidLoad{}中的tableView。

0 0
原创粉丝点击