Ios 在应用程序仍在运行时调用UITableViewDelegate dealloc方法

Ios 在应用程序仍在运行时调用UITableViewDelegate dealloc方法,ios,uitableview,exc-bad-access,dealloc,Ios,Uitableview,Exc Bad Access,Dealloc,我有一个处理表的委托方法的类。我使用了IB,并将一个UITableViewDelegate拖到NIB中,我将其更改为我的类。我还在NIB中包含了一个UITableView对象,在这里我将委托和数据源连接到我的TableViewDelegate类 我的类从internet获取其表数据,因此我在视图设计中调用了一次委托方法,并返回一个计数0,因为我的数据尚未到达。当我获取完所有数据后,我执行[myTable reloadData]并再次调用我的委托方法。 问题是我调用了numberOfRowsInS

我有一个处理表的委托方法的类。我使用了IB,并将一个UITableViewDelegate拖到NIB中,我将其更改为我的类。我还在NIB中包含了一个UITableView对象,在这里我将委托和数据源连接到我的TableViewDelegate类

我的类从internet获取其表数据,因此我在视图设计中调用了一次委托方法,并返回一个计数0,因为我的数据尚未到达。当我获取完所有数据后,我执行[myTable reloadData]并再次调用我的委托方法。 问题是我调用了numberOfRowsInSection,现在我返回了行数,但从未调用cellForRowAtIndexPath,而是获得了EXC\u BAD\u访问权。 启用堆栈历史记录和僵尸后,我发现正在调用该类的dealloc

dealloc restTable类-在dealloc方法中使用NSLOG生成

2011-02-27 00:33:59.979 PesquisaMapa[3526:207]*-[Restable tableView:CellForRowatineXpath:]:消息发送到解除分配的实例0x5624190 由于我的对象最初是在IB中创建的,并且它的IBOutlet是在主类头文件中声明的,并且只有在应用程序完成时才解除分配,因此我真的不理解为什么要解除分配这个类实例。 我的堆栈如下所示:

(gdb)信息malloc历史0x5624190 Alloc:块地址:0x05624190长度:160 堆栈-pthread:0xa0a5f540帧数:34 malloc_zone_calloc中的0:0x9876f103 calloc中的1:0x9876f05a 2:内部类createInstanceFromZone中的0x110ad0f 3:0x110d87d在类_createInstance中 4:0xedaff8 in+[NSObject(NSObject)allocWithZone:] +[NSObject(NSObject)alloc]中的5:0xedadfa 6:0x4c1205 in-[UIClassSwapper initWithCoder:] UINIBDecordeCodeObjectForValue中的7:0x5a79e4 8:0x5a8693 in-[UINibDecoder decodeObjectForKey:] 9:0x4c0f43 in-[UIRuntimeConnection initWithCoder:] UINIBDecordeCodeObjectForValue中的10:0x5a79e4 11:UINIBDecordeCodeObjectForValue中的0x5a72dc 12:0x5a8693 in-[UINibDecoder decodeObjectForKey:] 13:0x4c0200 in-[UINib实例化所有者:选项:] 14:0x4c2081 in-[NSBundle(UINSBundLeadEditions)loadNibNamed:所有者:选项:] 15:0x37aa94 in-[UIViewController\u loadViewFromNibNamed:bundle:] 16:0x378709 in-[UIViewController loadView] 17:0x3785e3 in-[UIViewController视图] 18:0x22fe in-[PesquisaMapaAppDelegate应用程序:使用选项完成启动:]at/Users/pcasqueiro/Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19:0x2cb1fa in-[UIApplication\u CallInitializationDelegatesForRL:有效负载:挂起:] 20:0x2cd55e in-[UIApplication\u runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 21:0x2d7db2 in-[UIApplication handleEvent:withNewEvent:] 22:0x2d0202 in-[UIApplication sendEvent:] 23:0x2d5732 in_UIApplicationHandleEvent 24:0x18eca36英寸紫背 25:0xf98064 inCFRUNLOOP\u正在调用\u OUT\u以执行\u源1\u功能 26:0xef86f7在\uuuu CFRunLoopDoSource1中 27:0xef5983英寸\uuuu CFRunLoopRun CFRunLoopRunSpecific中的28:0xef5240 29:0xef5161处于cfrunlooprunin模式 30:0x2ccfa8英寸-[UIApplication\u运行] UIApplicationMain中的31:0x2d942e 32:0x228c在main at/Users/pcasqueiro/Documents/PesquisaMapa/main.m:14中 33:0x221d处于启动状态

看起来在DidFinishLaunching中正在使用我的主类选项进行一些清理

有没有关于我做错了什么的想法

谢谢, PC

UITableView(和大多数其他类)不保留其代理。这意味着,如果您没有以某种方式保留委托(例如,通过将委托分配给声明为retain的属性),那么它将在某个时候由主运行循环处理