如果在-(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{
}
@property (nonatomic,retain) UITableView *tableView;
@end
-----------------------------------------------------------------
MyViewContrller.m
@implementation
@synthesize: tableView
-
[super viewDidLoad];
tableView=[[UITableView alloc] init];
[self.view addSubView:tableView];
}
-
[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。