From cdff939bd4ce25df73820412d11c582c778b8fb4 Mon Sep 17 00:00:00 2001 From: liuruyong <466374269@qq.com> Date: Wed, 29 Mar 2017 09:07:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?NSTimer=20=E5=BC=B1=E5=BC=95=E7=94=A8=20Ban?= =?UTF-8?q?nerView,=20=E5=9C=A8=E5=A4=96=E9=83=A8=E5=BF=98=E8=AE=B0?= =?UTF-8?q?=E8=B0=83=E7=94=A8stopTimer=E6=97=B6=E4=B9=9F=E4=B8=8D=E4=BA=A7?= =?UTF-8?q?=E7=94=9F=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZYBannerView/ZYBannerView.m | 45 +++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/ZYBannerView/ZYBannerView.m b/ZYBannerView/ZYBannerView.m index f5ceddd..156243d 100644 --- a/ZYBannerView/ZYBannerView.m +++ b/ZYBannerView/ZYBannerView.m @@ -8,6 +8,43 @@ #import "ZYBannerView.h" #import "ZYBannerCell.h" +@interface ZYWeakTimerTarget : NSObject + +@property (nonatomic,weak) id target; +@property (nonatomic,assign) SEL selector; + ++ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval target:(id)target selector:(nonnull SEL)sel; +@end + +@implementation ZYWeakTimerTarget +- (instancetype)initWithTarget:(id)target selector:(SEL)sel { + self = [super init]; + if (self) { + self.target = target; + self.selector = sel; + } + return self; +} + +- (void)timerDidFire:(NSTimer *)timer { + if(self.target) + { + [self.target performSelector:self.selector withObject:timer]; + } + else + { + [timer invalidate]; + } +} + ++ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval target:(id)target selector:(SEL)sel { + ZYWeakTimerTarget * weakTarget = [[self alloc]initWithTarget:target selector:sel]; + NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:interval target:weakTarget selector:@selector(timerDidFire:) userInfo:nil repeats:YES]; + return timer; +} + +@end + // 总共的item数 #define ZY_TOTAL_ITEMS (self.itemCount * 10000) @@ -23,7 +60,7 @@ @interface ZYBannerView () Date: Wed, 29 Mar 2017 20:04:12 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20iOS10=20=E6=96=B0?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=AE=9E=E7=8E=B0NSTimer=E5=BC=B1=E5=BC=95?= =?UTF-8?q?=E7=94=A8target?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZYBannerView/ZYBannerView.m | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ZYBannerView/ZYBannerView.m b/ZYBannerView/ZYBannerView.m index 156243d..eb6ed53 100644 --- a/ZYBannerView/ZYBannerView.m +++ b/ZYBannerView/ZYBannerView.m @@ -7,6 +7,9 @@ #import "ZYBannerView.h" #import "ZYBannerCell.h" +#import + +#define iOS10 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) @interface ZYWeakTimerTarget : NSObject @@ -38,8 +41,19 @@ - (void)timerDidFire:(NSTimer *)timer { } + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval target:(id)target selector:(SEL)sel { - ZYWeakTimerTarget * weakTarget = [[self alloc]initWithTarget:target selector:sel]; - NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:interval target:weakTarget selector:@selector(timerDidFire:) userInfo:nil repeats:YES]; + NSTimer * timer; + + if (iOS10) { + __weak id weakTarget = target; + timer = [NSTimer scheduledTimerWithTimeInterval:interval repeats:YES block:^(NSTimer* t) { + id _Nullable strongTarget = weakTarget; + [strongTarget performSelector:sel]; + }]; + }else { + ZYWeakTimerTarget * weakTarget = [[self alloc]initWithTarget:target selector:sel]; + timer = [NSTimer scheduledTimerWithTimeInterval:interval target:weakTarget selector:@selector(timerDidFire:) userInfo:nil repeats:YES]; + } + return timer; }