美文网首页
CAAnimation循环引用

CAAnimation循环引用

作者: 机智的猪 | 来源:发表于2017-10-12 14:57 被阅读144次
image

解决方案0


@protocol HYAnimationWeakDelegate <NSObject>
@optional
- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim;
@end

@interface HYAnimationDelegateManager : NSObject <CAAnimationDelegate>
@property (weak, nonatomic) id<HYAnimationWeakDelegate> delegate;
@end

@implementation HYAnimationDelegateManager
- (void)animationDidStart:(CAAnimation *)anim {
    if (_delegate && [_delegate respondsToSelector:@selector(animationDidStart:)]) {
        [_delegate animationDidStart:anim];
    }
}
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    if (_delegate && [_delegate respondsToSelector:@selector(animationDidStop123:)]) {
        [_delegate animationDidStop:anim];
    }
}
@end

//使用:
HYAnimationDelegateManager * manager = [HYAnimationDelegateManager new];
manager.delegate = self;
anim.delegate = manager;

解决方案1

声明一个单独的类实现delegate的回调

//.h
#import <UIKit/UIKit.h>

@interface AnimationDelegate : NSObject

@end

//.m
#import "AnimationDelegate.h"

@implementation AnimationDelegate

- (void)animationDidStart:(CAAnimation *)anim
{
    NSLog(@"Animation Start");
}

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    NSLog(@"Animation Stop");
}

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

@end

使用方式

self.animation.delegate = [[AnimationDelegate alloc]init];

eg: http://blog.csdn.net/a787188834/article/details/78303594

解决方式2:
使用NSProxy来解决
该类可直接引用YYKit中的YYWeakProxy类
使用方法

self.animation.delegate = [YYWeakProxy proxyWithTarget:self];

//NSTimer
https://www.jianshu.com/p/469bf43e522b

相关文章

  • CAAnimation循环引用

    解决方案0 解决方案1 声明一个单独的类实现delegate的回调 使用方式 eg: http://blog.cs...

  • 4-8 循环引用

    3种循环引用 自循环引用 相互循环引用 多循环引用 Block的循环引用 NSTimer 的循环引用 破除循环引用...

  • 循环引用的相关问题

    1、循环引用的种类(1)自循环引用(2)相互循环引用(3)多循环引用 如何破除循环引用?(1)避免产生循环引用(2...

  • CAAnimation 动画之循环转动

    CAAnimation 之属性 isRemovedOnCompletion 要设置为 false ,才能不停地循环转动

  • iOS 内存管理面试题(循环引用)

    循环引用 循环引用的实质:多个对象相互之间有强引用,不能释放让系统回收。 如何解决循环引用? 1、避免产生循环引用...

  • 内存管理-循环引用

    三种类型循环引用 自循环引用 相互循环引用 多循环引用 自循环引用 假如有一个对象,内部强持有它的成员变量obj,...

  • iOS 循环引用

    1. 循环应用的分类: 自循环引用; 相互循环引用; 多循环引用; 自循环引用: 一个对象中有一个成员变量A; 如...

  • iOS开发 循环引用的几种场景

    delegate 循环引用如果delegate使用strong修饰容易引起循环引用 block 循环引用block...

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • 避免Block的循环引用

    避免Block的循环引用 什么是循环引用,什么时候发生循环引用 1 循环引用就是当self 拥有一个block的...

网友评论

      本文标题:CAAnimation循环引用

      本文链接:https://www.haomeiwen.com/subject/oytoyxtx.html