- 应用类型:手机
- 钛 SDK:3.1.1.GA
- 平台和版本:iOS 6.1
- 设备:iOS模拟器
- 主机操作系统:OSX 10.8.4
- 钛工作室:3.1.1.201306112235
parent_controller.js:
_.each(category, function(inventory_item, index, list) {
var row = Alloy.createController('inventory_list_row', {
selectedBackgroundColor: '',
data: inventory_item
});
row.destroy();
row = null;
});
Ti.App.fireEvent('checkIn');
库存列表行.js:
Ti.App.addEventListener('checkIn', function(e) {
console.info('Checking In: ' + args.data.title);
});
前言:上面的代码被淡化以证明一个观点。我知道它并没有真正做任何事情,但它确实有问题。
parent_controller.js 中的代码可以根据我的 Titanium Mobile iPad 应用程序中的用户交互执行多次。如果上面的代码只在一切正常后运行。每次上面的代码再次运行时,以前的控制器都会在内存中保留一些,并且仍在捕获事件。
例如,假设第一次执行代码时生成了 3 个inventory_list_row 控制器。在控制台中,我将看到 3 条“签入”消息按预期出现。但是,第二次运行时,我会在控制台中看到 6 条“签入”消息,依此类推。
为什么会这样,我能做些什么来防止这种情况发生?您可以看到我尝试使用 .destroy 并将 row 设置为 null 无济于事。