在appcelerator titanium中进行数据绑定并避免内存崩溃的最佳做法是什么
What are the best practises for data binding in appcelerator titanium and avoid memory crash
我一直在使用自定义事件来处理与titanium appcelerator的数据绑定,使用一个名为RefreshComp的事件来处理给定对象id(在所有对象中都是唯一的)和传递新值的属性。这个新值可能来自推送通知,一个在iphone应用程序中编辑的对象,你想传播到所有的comp等等
Titanium.App.fireEvent(RefreshComp, {
refreshid : objectId + '-' + attribute,
value : newvalue
});
和
function registerEvent(objectId,attribute,eventHandler){
Titanium.App.addEventListener(RefreshComp, function(e) {
if((e.refreshid === (objectId + '-' + attribute))) {
eventHandler(comp, e.value);
}
});
}
然后您的eventHandler函数可以像一样简单
function eventHandler(comp,newvalue){
comp.value = newvalue;
}
或更复杂的(如改变背景等)
我的观点是,这会导致comp绑定到全局上下文,从而导致对象无法释放。我曾尝试将自定义事件附加到组件本身,但它不起作用。因此,我得到了与崩溃的应用程序
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x242424cf
因为绑定指的是IOS侧仍在内存中的组件,但当TiViewProxy.m调用_hasListeners中的父函数时,它无法在内存中找到没有任何关联对象的父函数,并且该父函数已从内存中删除
我在谷歌上搜索过appcelerator的git rep,但没有这样的例子。
有数百万种方法可以刷新特殊组件。我通常倾向于有一个干净简单的结构,其中每个js文件都由一个ui元素组成。这提供了一种管理ui的干净方法。如果您的组件侦听类似globalRefreshEvent的事件,它会刷新自己。
createMyComponent = function(_args){
var myComp = Ti.UI.createWhatEver({
property0 = _args.prop0 || "defaultValueForProp0"
property1 = _args.prop1 || "defaultValueForProp1"
value = _args.value || "defaultValueForValue"
});
myComp.refreshValue = function(_newValue){
myComp.value = _newValue;
};
Ti.App.addEventListener('globalRefreshEvent',function(e){
myComp.refreshValue(e.value)
});
return myComp;
};
创建这样的comp:
var comp = createMyComponent();
view.add(comp);
希望能有所帮助。
相关文章:
- location.reload(true)崩溃浏览器选项卡
- 引导程序崩溃一次只能看到一个
- Grunt构建导致Angular应用程序在dist上崩溃
- jquery扩展了崩溃效率
- 重复应用 d3 转换导致的内存泄漏
- 如何显示在给定极限内存在的所有素数
- IE7中的blockUI插件内存泄漏25kb
- Javascript闭包-如何防止内存泄漏
- 为什么这个For循环会使浏览器实验室崩溃
- 基于订阅的nosql内存数据库
- 在浏览器崩溃之前检测到内存耗尽
- 媒体源扩展视频崩溃(内存泄漏)
- three.js内存泄漏/浏览器崩溃
- 由于内存消耗过多,MobileSafari崩溃
- 移动野生动物园崩溃日志 - 内存不足
- 在appcelerator titanium中进行数据绑定并避免内存崩溃的最佳做法是什么
- NodeJS:内存使用在递归抓取期间增长,直到崩溃
- Node.js应用程序不断崩溃-内存
- 我如何运行一个繁重的cpu和内存HTML/javascript程序?(firefox、chrome崩溃)
- Firefox 28(仅Win7)在JS内存泄漏后崩溃