Unity3d IOS项目中interface的多态指向的bug

今天修复了一个bug,大致描述为内存中的数据莫名其妙的被修改掉了。
实际项目比较庞大,不再赘述。
代码描述如下(简易代码):

     public interface IInterfaceA
        {
             float GetNum();
        }

        public class ClassA : IInterfaceA
        {

            public float GetNum()
            {
                return 1f;
            }
        }

        public class Test
        {
            private IInterfaceA instanceA;
            public Test()
            {
                instanceA = new ClassA();
            }

            public void Click()
            {
                float a = instanceA.GetNum();
                //ClassA classA = instanceA as ClassA;
                //float a = classA.GetNum();
            }
        }
bug重现方法描述如下(非必现- -):
bug的现像为调用Click方法中的float a取出来的并不是1f而是如:3.456789E-30这样一个趋近于0的浮点数,而且每次取的时候,会不一样。
1,项目为unity3d发布出来的ios项目脚本为C#
2,产生bug的测试设备为:ipadmini、ipadmini2,iphone4s
3,同样的代码在android设备上运行正常,在windows和mac下的unityeditor中运行正常

可能会怀疑,代码复杂的时候instanceA不再是ClassA的一个实例,而是其它一个实现了IInterface的一个实例,实际review代码的时候已经把能精简的代码全给注释掉,从review的层面确保是同一个实例。 并且对比过GetHashCode()取值,为相同。完全排除了这种可能。

解决方法:
尝试过N种写法,都失败了
最后当把instanceA强转为ClassA类型的时候再次取a(被注释掉的两行代码),结果正常,为1f
猜想:
猜想可能会出现相关bug的情况:继承关系,接口实现。尽管我们写代码的时候不能放弃接口和继承,但出现类似问题的时候一定要看下相关的代码是否用了接口和继承,只要是多态,不明确自己到底是哪个模版(Class)的实例
时候,  对unity3dios项目会比较危险。


本周发部的unity4.5.0已经解决了这个BUG,文档中有提到
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值