核心動(dòng)畫代理內(nèi)存泄露解決方法

在使用核心動(dòng)畫代理的時(shí)候出現(xiàn)內(nèi)存泄露,主要是因?yàn)閐elegate 是strong修飾的導(dǎo)致循環(huán)引用, 釋放不了就內(nèi)存泄漏了,下圖所示:

image.png

通過自定義代理方法可以解決內(nèi)存泄露問題。以下是自定義代理方法的代碼:

#import <UIKit/UIKit.h>

@protocol KKAnimationDelegateDelegate <NSObject>

@optional
//動(dòng)畫結(jié)束
- (void)finishAnimation;
//動(dòng)畫開始
- (void)startAnimation;
@end

@interface KKAnimationDelegate : NSObject
@property (weak, nonatomic) id<KKAnimationDelegateDelegate> delegate;
@end
#import "KKAnimationDelegate.h"

@implementation KKAnimationDelegate
- (void)animationDidStart:(CAAnimation *)anim {
    if (_delegate && [_delegate respondsToSelector:@selector(startAnimation)]) {
        [_delegate startAnimation];
    }
}

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    if (_delegate && [_delegate respondsToSelector:@selector(finishAnimation)]) {
        [_delegate finishAnimation];
    }
}


- (void)dealloc {
    NSLog(@"Delegate Dealloc");
}
@end

使用自定義代理代碼

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
anim.fillMode = kCAFillModeForwards;
KKAnimationDelegate *animationDelegate = [[KKAnimationDelegate alloc] init];
animationDelegate.delegate = self;
[anim setDelegate:animationDelegate];
[anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
    
[_imgView.layer addAnimation:anim forKey:@"rotation"];
//防止CABasicAnimation 按home鍵切到后臺(tái)之后,再按home鍵回來動(dòng)畫就停止了
anim.removedOnCompletion = NO;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 內(nèi)存管理 簡述OC中內(nèi)存管理機(jī)制。與retain配對(duì)使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,086評(píng)論 1 16
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,388評(píng)論 25 708
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,667評(píng)論 30 472
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評(píng)論 19 139
  • 晨讀推薦的書經(jīng)典且實(shí)用,分享的知識(shí)或小技巧有時(shí)候給人豁然開朗的感覺,一點(diǎn)點(diǎn)幫助著撥開云霧見陽光。 關(guān)鍵仍在行動(dòng),分...
    哇哇來啦閱讀 166評(píng)論 0 0

友情鏈接更多精彩內(nèi)容