【发布时间】:2014-07-30 10:41:53
【问题描述】:
我有一个类方法:
+ (UIBarButtonItem*)navItemWhichAddsNewAction{
UIBarButtonItem* addActionButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"icon_add"] style:UIBarButtonItemStylePlain target:nil action:nil];
addActionButton.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [RACSignal empty];
}];
return addActionButton;
}
然后,在–viewDidLoad,我把这个方法的结果赋值给navigationItem的右键:
self.navigationItem.rightBarButtonItem = [MyClass navItemWhichAddsNewAction];
如果我随后使用 Instruments 分析应用程序,即使视图控制器(和导航控制器)被释放,上面的 rac_command 块也始终报告为已分配。
为什么?
【问题讨论】:
-
什么是
rac_command?请您也发布整个相关的UIBarButtonItem类别好吗? -
rac_command 是 ReactiveCocoa (reactivecocoa.io) 的一部分。
-
你问过那个框架的作者这个问题了吗?
-
是的,我已经在他们的 github 问题页面上发布了它,并且我在这里也用 reactive-cocoa 标记了它,希望这里也有一些 RAC 开发人员 ;)。
-
RAC 实现了一些常见的对象——
[RACSignal empty]、[RACUnit defaultUnit],以及其他一些——作为发布版本中的单例,以减少不必要的分配。因此,这些对象在您的应用程序的生命周期内永远不会被释放,这会使它看起来就像您正在泄漏一个信号。如果您拨打[MyClass navItemWhichAddsNewAction]十次,您最终会收到十个信号,还是只有一个?
标签: ios objective-c memory-leaks uibarbuttonitem reactive-cocoa