菜鸟教程小白 发表于 2022-12-12 11:57:38

ios - raywenderlich 教程 - 简单的 iphone 游戏 - 第 2 部分


                                            <p><p>我正在使用 <a href="http://www.raywenderlich.com/25791/rotating-turrets-how-to-make-a-simple-iphone-game-with-cocos2d-2-x-part-2" rel="noreferrer noopener nofollow">iphone games tutorial</a> 的第二部分,我对 <code>ccTouchesEnded</code> 方法的实现感到困惑。这是实现“射击”的地方:玩家(一门大炮)转向接触的方向,射弹被射击。
我不清楚的部分是:<code>_nextProjectile</code> 似乎在它仍然可以使用时被释放(通过它下面的代码 - <code>_nextProjectile runAction</code>)。
您能否解释一下为什么此时释放该对象是安全的?</p>

<pre><code>- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

[_player runAction:

[CCSequence actions:

,

[CCCallBlock actionWithBlock:^{

   // OK to add now - rotation is finished!

   ;

   ;



   // Release

   ;

   _nextProjectile = nil;

}],

nil]];



// Move projectile to actual endpoint

[_nextProjectile runAction:

[CCSequence actions:

,

[CCCallBlockN actionWithBlock:^(CCNode *node) {

   ;

   ;

}],

nil]];



}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>之前在 <em>ccTouchesEnded:withEvent:</em> 中,您在此行增加了 <strong>_nextProjectile</strong> 的保留计数:</p>

<pre><code>_nextProjectile = [ retain];
</code></pre>

<p>因此,稍后您必须减少保留计数以防止内存泄漏。换句话说:您有责任释放此保留。这就是这条线的来源:</p>

<pre><code>;
</code></pre>

<p>为什么在那个时候释放它是安全的?您在问题中发布的代码段实际上都是一系列操作中的操作。</p>

<pre><code>];
</code></pre>

<p>对对象执行操作会增加该对象的保留计数。这意味着 Action 对象本身创建并持有另一个对 <strong>_nextProjectile</strong> 的引用。 Action 序列是在 Action 实际执行之前创建的,因此 Action 对象已经拥有自己对 <strong>_nextProjectile</strong> 的引用。所以在其中一个 Action 中释放它实际上是安全的。他们等待释放 <strong>_nextProjectile</strong>,直到这些行通过:</p>

<pre><code>;
;
</code></pre>

<p>这些行之前的版本可能(我没有看过除了 <em>ccTouchesEnded:withEvent:</em> 之外的任何其他代码)会导致 EXC_BAD_ACCESS 运行时错误。</p>

<p>以下是有关保留计数的更多信息:<a href="http://www.cocos2d-iphone.org/forums/topic/cleanup-help-me-understand/" rel="noreferrer noopener nofollow">cocos2d forum</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - raywenderlich 教程 - 简单的 iphone 游戏 - 第 2 部分,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17248005/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17248005/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - raywenderlich 教程 - 简单的 iphone 游戏 - 第 2 部分