我有一个cocoapod的项目(我们称之为"Main"),它与另一个cocoapod有一个依赖关系(我们称之为"Util").
我可以通过"pod'Util'"在Main的Podfile中添加Util,并通过"s.dependency'Util'"将其指定为podspec中的依赖项.
只要至少写入其中一个,我的pod测试项目运行正常(如果没有podspec中的依赖项,运行"pod lib lint"命令会返回错误)
在Podfile中指定pod可以让我更精确地了解我希望版本的准确程度,甚至允许我使用:head作为目标.但是,依赖性似乎更加有限,需要标签.
我想知道这两种方法之间的区别,以及当一个pod依赖于另一个pod时是否有好的做法(特别是因为我最终想要将Main用作其他项目的pod)
我有一个函数,它将另一个函数作为参数.像这样的东西:
public function onHits(target : Shape, callback : Function) : void
Run Code Online (Sandbox Code Playgroud)
我通过传递一个成员函数作为参数来使用它,只要传递的目标命中某个东西就应该调用它.该函数被一次调用多次.所以它用于做:
//code...
CollisionManager.onHits(myShape, onHitCB);
//code...
Run Code Online (Sandbox Code Playgroud)
点击功能:
public function onHitCB(hitObject : *) : void
{
//removed all code to test this problem
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我有内存泄漏.我已经将问题与onHits方法隔离开来,并已注释掉其他所有内容.onHits是一个空方法,里面没有代码,onHitCB也是空的.如果我注释掉对onHits的调用,则没有内存泄漏,如果我传递null而不是onHitCB,则没有内存泄漏.
因此,当我将HitCB作为参数传递给问题时,显然也是如此.所以我认为这可能是因为Flash分配了一些内存来创建Function指针并且不释放它但是我在调试模式中每一帧调用System.gc()并且泄漏仍然存在.这意味着这可能是SDK中的错误,或者我没有做正确的事情.
通过保持一个指向我在对象的构造函数中指定的函数的变量,我找到了一个奇怪的解决方法:
private var func : Function;
public function MyObject()
{
func = onHitCB;
}
Run Code Online (Sandbox Code Playgroud)
即使我仍然将HitCB作为参数传递,这也将清除内存泄漏.那么这意味着获取onHitCB不是"getter"函数,而是导致内存泄漏的其他因素?
我很困惑.这怎么会导致内存泄漏:
public function MyObject()
{
}
public function update() : void
{
CollisionManager.onHits(myShape, onHitCB);//empty function
}
public function onHitCB(hitObject : *) : void
{
//removed all code to test …Run Code Online (Sandbox Code Playgroud) 我刚刚更新到flash player 11.2,它允许监听MouseEvent.RIGHT_MOUSE_UP和MouseEvent.RIGHT_MOUSE_DOWN.
我遇到的问题是这些事件的行为与其MOUSE_UP/MOUSE_DOWN对应物的行为不同.具体来说,无论鼠标在哪里,都会启动MOUSE_UP事件.这允许在Flash窗口外拖动,并且每当用户点击flash播放器时仍然具有完整的down - > up事件循环.
但是,RIGHT_MOUSE_UP/DOWN似乎不是这种情况.当我右键单击播放器并在播放器外部释放时,我没有得到RIGHT_MOUSE_UP事件,这意味着可以在不接收UP事件的情况下接收多个RIGHT_MOUSE_DOWN事件.
是否有一个已知的解决方法或是否有一个我必须设置的选项?
编辑:
这是一个代码示例:
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addeventListener(MouseEvent.RIGHT_MOUSE_UP, onRightMouseUp);
stage.addeventListener(MouseEvent.RIGHT_MOUSE_DOWN, onRightMouseDown);
//...
//all callback function follow a similar format as :
private function onMouseUp(e : MouseEvent) : void
{
leftClick_ = false;//signaling that leftClick is not pressed
}
Run Code Online (Sandbox Code Playgroud) 我正在使用cocoapods,并希望使用特定于调试模式的xcconfig参数在pod的podspec中指定一个值.
目前,使用:
s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => "MY_DEFINE=1" }
Run Code Online (Sandbox Code Playgroud)
将设置Debug和Release模式的值.还尝试使用:
s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS[config=Debug]" => "MY_DEFINE=1" }
Run Code Online (Sandbox Code Playgroud)
但是,虽然这将它设置在pod的预处理器宏中,但在执行代码期间似乎没有注册,这与不使用[config = Debug]标记时不同.有没有办法将其限制为仅调试模式?
有没有办法知道Function的一个实例可以在Flash中使用多少个参数?了解这些参数是否可选也是非常有用的.
例如 :
public function foo() : void //would have 0 arguments
public function bar(arg1 : Boolean, arg2 : int) : void //would have 2 arguments
public function jad(arg1 : Boolean, arg2 : int = 0) : void //would have 2 arguments with 1 being optional
Run Code Online (Sandbox Code Playgroud)
谢谢