我认为这不是一个常见的问题,这使它更难回答。任何帮助我们都将不胜感激。
我需要在我的应用程序中多次调用此委托,我注意到多次之后,该委托开始返回为NULL(因此停止响应)。我在代表被呼叫的任何地方都放了一个nslog,所以我知道在这一点上,它很好:
UIImage *image = [self.delegate largeThumnailForMediaAtIndex:indexPath.row];
然后,下次调用此行时,委托将设置为NULL。它周围没有行调用或设置代理。我在setDelegate方法上也放了一个NSLog,在它变为NULL之前没有被调用。
任何您可能需要查看的代码,请告诉我。任何你想让我尝试的想法,也让我知道。
谢谢你的帮助。
编辑:奇怪,但可能有助于找到解决方案。我设置了NSTimer scheduledTimer。。在成为委托的类中,并让它每秒激发一次,这样我就可以看到它是否在任何时候变为空。然而,我得到的结果是,这一次它没有变为空。它返回了所有的委托方法。当我把计时器取出来时,它会返回NULL。显然,有一个计时器是一个奇怪的变通办法"解决方案"。我希望这能给某人敲响警钟,让他们知道问题可能在哪里?
第2版:我解决了这个问题,而不是在我的AppDelegate:中使用这个代码
JCreateViewController *create = [[JCreateViewController alloc] init];
[create.navigationBar addLeftButtonWithTitle:@"Back" type:JButtonTypeArrow];
create.navigationBar.title = @"Entry #17";
[self.window addSubview:create.view];
在我的头文件中声明它,然后使用这个:
self.create = [[JCreateViewController alloc] init];
[self.create.navigationBar addLeftButtonWithTitle:@"Back" type:JButtonTypeArrow];
self.create.navigationBar.title = @"Entry #17";
[self.window addSubview:self.create.view];
我不明白为什么这会有什么不同。我很想知道,如果有人知道的话?
看起来你在使用ARC。无论这个对象是什么,都没有任何东西拥有它。没有任何东西对它有强引用,所以它被释放,然后在某个时候被释放。
JCreateViewController *create = [[JCreateViewController alloc] init];
这是一个局部变量。当变量在方法结束时超出范围时,您将无法再访问该对象。根据MRR,这将是一次泄漏。在ARC下,对象将死亡,就像它在自动释放池中一样。
self.create = [[JCreateViewController alloc] init];
通过创建一个属性(大概是strong
)并将控制器放入该属性中,您已经为控制器提供了self
的所有权引用。只要属性没有重新分配或设置为nil
,它就会一直存在。
计时器修复了一些问题,因为计时器保留了它的目标(我认为它是控制器(你的问题很不清楚)),并且计时器本身由运行循环保留。因此,运行循环使重复计时器保持活动状态,计时器使控制器保持活动状态。
简而言之,确保某个东西拥有这个对象,它就会一直存在。