之前给外包接微信、fb、gp、appstore等,lua调用的类是这么定义的:
local Platform_Appstore = class("Platform_Appstore",function()
return display.newLayer()
end)
咋看一下是个很普通的用法,但却制造了2个非常难以调试的bug,给后来的工作带来了莫大的痛苦。
BUG1:ios真机调试,appstore支付后,乱点界面一通后,闪退,xcode报错卡在oc文件的touchbegan中。
这个bug的难点在于无法定位lua层出错的语句,只能根据oc报错确定为touch相关的报错。
原因:由于Platform_Appstore类是集成自CCObject的基类,付款的时候创建了一次,大概是由于(没有细查原因)付费完成后在某个时间点被自动回收了,造成touch混乱出错。
BUG2:外包接完sdk后,做了个Platform_Test类测试
self:createButton("googleplay_pay",cc.p(display.cx, display.cy - 100), function()
local gp = Platform_GooglePlay.new()
gp:pay()
end)
-- local gp = Platform_GooglePlay.new()
-- gp:createMenu_Googleplay(self)
-- gp:addTo(self)
下面被注释的为外包原来写的测试,改为上面的代码应该是一样的,但却无法调用gp了。
原因:同样是由于Platform_GooglePlay集成自CCLayer,在创建了之后没有retain,于是在下一帧便被自动回收了。
解决:改成直接创建class。
local Platform_Appstore = class("Platform_Appstore")