2013-02-20 48 views
0

我已經寫了一個小客戶調查應用程序,在頂部我有一輛汽車和一輛麪包車,我假裝的圖像放大。但是我編碼的方式將它變成了一個無限循環,其中一個方法調用另一個方法,反之亦然。這就是動畫永遠播放。一種方法永遠調用另一種方法,這會導致任何問題嗎?

這裏是我的代碼

-(void)doAnimate { 

    // animate van 
    [UIView animateWithDuration:1.0 
          delay:7.f 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 

         vanView.frame = CGRectMake(770, 175, vanView.frame.size.width, vanView.frame.size.height); 

        } completion:^(BOOL finished) { 
         if (finished) { 
          [self doAnimateLoop]; 
         } 
        }]; 

    // animate car 
    [UIView animateWithDuration:1.0 
          delay:3.f 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 

         carView.frame = CGRectMake(-600, 250, carView.frame.size.width, carView.frame.size.height); 

        } completion:^(BOOL finished) { 
         if (finished) { 

         } 
        }]; 
} 

-(void)doAnimateLoop { 


    vanView.frame = CGRectMake(-600, 175, vanView.frame.size.width, vanView.frame.size.height); 
    carView.frame = CGRectMake(770, 250, carView.frame.size.width, carView.frame.size.height); 


    // second animation van 
    // animate van 
    [UIView animateWithDuration:1.0 
          delay:2.f 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 

         vanView.frame = CGRectMake(111, 175, vanView.frame.size.width, vanView.frame.size.height); 

        } completion:^(BOOL finished) { 
         if (finished) { 

         } 
        }]; 

    // animate car 
    [UIView animateWithDuration:1.0 
          delay:5.f 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 

         carView.frame = CGRectMake(104, 250, carView.frame.size.width, carView.frame.size.height); 

        } completion:^(BOOL finished) { 
         if (finished) { 
          [self doAnimate]; 
         } 
        }]; 

} 

我想知道這是怎麼回事導致在未來的應用程序的任何問題?像內存泄漏或可能導致它崩潰的東西。

任何幫助將不勝感激。

回答

-2

如果它運行在一個單獨的線程中,則進入無限循環並不是問題。問題是你可以處理記憶。因爲即使最微小的泄漏會導致碰撞,環路也是無限的。我建議你使用一些有效的API,如果你懷疑你的手髒了,就把它放在手中

0

如果你照顧的話,無限循環不一定是壞的。

您需要確保在不需要動畫時停止動畫,因爲它會佔用寶貴的CPU時間。這可以讓你的應用程序響應速度慢,因爲它不需要CPU時間動畫。

當視圖不再附加到活動窗口時(參見下面的代碼),您可以停止動畫,這是從視圖控制器導航的情況。

/** 
* doAnimate 
* Animates view with a call back to its self for infinite animation, stops on view unload. 
*/ 
-(void)doAnimate 
{ 
    //view is active, animate. else stop 
    //this will stop the animation when the view is unloaded 
    if (self.view.window) 
    { 
     //Animate your views 
    } 
} 

根據內存泄漏,如果您有良好的編碼標準和實踐,內存泄漏很少見。如果您擔心或懷疑有內存泄漏,那麼您可以使用通常的工具(即Instruments)檢查內存使用情況。

根據你的代碼,它看起來很好的基本實現。 祝你好運。