当前位置:  编程技术>移动开发
本页文章导读:
    ▪delegate为啥用弱引用        delegate为什么用弱引用比如在A页面设置B的delegate为A的实例,  // A.m中某处 B* b = [B alloc] init]; b.delegate = self; [self.view addSubview:b]; [b release]; 那么 1.是A负责创建B的,A的生命周期一定比B要长(B存.........
    ▪ Testin云测试,免费的搬动App应用真机自动化云测试        Testin云测试,免费的移动App应用真机自动化云测试http://www.testin.cn/portal.action?op=Portal.index ......
    ▪ sencha 怎么给tabpanel内的field传递值       sencha 如何给tabpanel内的field传递值用tabpanel的童鞋可能发现 用setrecord()后tabpanel里面的textfield无法有值,而非tabpanel的结构却没问题 tabpanel->panel->textfield 这种架构死活读不出来值 尝试.........

[1]delegate为啥用弱引用
    来源: 互联网  发布时间: 2014-02-18
delegate为什么用弱引用

比如在A页面设置B的delegate为A的实例, 

// A.m中某处

B* b = [B alloc] init];

b.delegate = self;

[self.view addSubview:b];

[b release];

那么

1.是A负责创建B的,A的生命周期一定比B要长(B存在,A一定也存在;A存在,B不一定存在)

也就是说 在B(实例b)存在的时候,A(的实例)一定存在, 所以没有必要用retain将引用计数+1,assign足以

 

2.退一步假设存在这样的情况:A比B先挂掉(A的实例先被release销毁)

那么当然希望是[a relase]后,A中的方法不再被B调用,但是使用retain时候,A还是没有被销毁,所以 A中的方法仍会被B调用,但是assgin就无此问题

 

3.本质上delegate就是一根指向先于它存在的某个类(CCClass)的指针(假设是:ccPoint),我们通过delegate这根指针去指向这个已经存在的指针(ccPoint) 那么通过delegate即ccPoint也就可以访问CCClass中的实例方法


4.避免retain cycle,即:有A,B两个Object, A中有一个B的实例变量,B中又有一个A的实例变量,要release A就必须releaseA中的B,而要release B有必须release B中的A,这样就产生了一个Retain Circle,A B都不能被dealloc.解决Retain Circle的方法就是使用弱引用(weak reference),弱引用没有被引用的那个Object的所有权,也就不需要release它,从而解决了Retain Circle问题.为了防止Retain Circle的发生, delegate通常都是弱引用的, 因此我们一般不应该retain一个delegate。NSURLConnection是个例外。

    
[2] Testin云测试,免费的搬动App应用真机自动化云测试
    来源: 互联网  发布时间: 2014-02-18
Testin云测试,免费的移动App应用真机自动化云测试
http://www.testin.cn/portal.action?op=Portal.index

    
[3] sencha 怎么给tabpanel内的field传递值
    来源: 互联网  发布时间: 2014-02-18
sencha 如何给tabpanel内的field传递值

用tabpanel的童鞋可能发现 用setrecord()后tabpanel里面的textfield无法有值,而非tabpanel的结构却没问题

tabpanel->panel->textfield 这种架构死活读不出来值


尝试了好几种方法

包括

1. 重构applyItems方法,不成功

applyItems:function (items, collection) {
        var i = 0,
            iNum = items.length,
            record = this.getRecord(),
            data = this.getData();
        for (; i < iNum; i++) {
            items[i].data = data;
        }
        return this.callParent([items, collection]);
    }


2. 读取所有items然后自己setData() setRecord()

不成功

3. 得到所有二级panel,然后setData() setRecord() 也不成功


哥们弄了一晚上

最后想到了

4 , 直接读取所有fields然后赋值

开始居然自己写了一个递归函数来getItems()所有的值,不成功

后来发现有query()函数,救星

实现代码如下

var reqFields = this.query('field[xtype=textfield]');
            console.dir(reqFields);
            var i = 0, ln = reqFields.length,field;
            for (; i < ln; i++) {
                field = record.get( reqFields[i].getItemId());
                 reqFields[i].setValue(field);
            }



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3