From 61ab8f6e06e3e6a0a9c1a6e66172109a8515f059 Mon Sep 17 00:00:00 2001 From: Robert Carone Date: Fri, 15 Apr 2016 10:09:33 -0700 Subject: [PATCH] view controller assignment cycle fix --- sparrow/src/Classes/SPView.h | 2 +- sparrow/src/Classes/SPView.m | 29 ++++++++++++-------------- sparrow/src/Classes/SPViewController.m | 1 + 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/sparrow/src/Classes/SPView.h b/sparrow/src/Classes/SPView.h index c2e7e0a1..e2efa484 100644 --- a/sparrow/src/Classes/SPView.h +++ b/sparrow/src/Classes/SPView.h @@ -24,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) CAEAGLLayer *layer; /// The parent view controller of this view. -@property (nonatomic, readonly) SPViewController *viewController; +@property (nonatomic, weak, readonly) SPViewController *viewController; @end diff --git a/sparrow/src/Classes/SPView.m b/sparrow/src/Classes/SPView.m index 9b55e117..6d2bebaa 100644 --- a/sparrow/src/Classes/SPView.m +++ b/sparrow/src/Classes/SPView.m @@ -13,10 +13,16 @@ #import "SPView_Internal.h" #import "SPViewController_Internal.h" +#import + +@interface SPView () + +@property (nonatomic, weak) SPViewController *viewController; + +@end + + @implementation SPView -{ - SPViewController __weak *_viewController; -} @dynamic layer; @@ -52,15 +58,15 @@ - (void)initCommon - (void)displayLayer:(CALayer *)layer { - [_viewController render]; + [self.viewController render]; } - (void)layoutSubviews { [super layoutSubviews]; - [_viewController viewDidResize:self.frame]; - [_viewController render]; + [self.viewController viewDidResize:self.frame]; + [self.viewController render]; } - (void)setFrame:(CGRect)frame @@ -68,17 +74,8 @@ - (void)setFrame:(CGRect)frame if (!CGRectEqualToRect(frame, super.frame)) { super.frame = frame; - [_viewController viewDidResize:self.frame]; + [self.viewController viewDidResize:self.frame]; } } @end - -@implementation SPView (Internal) - -- (void)setViewController:(SPViewController *)viewController -{ - _viewController = viewController; -} - -@end diff --git a/sparrow/src/Classes/SPViewController.m b/sparrow/src/Classes/SPViewController.m index b525b031..f567e0f3 100644 --- a/sparrow/src/Classes/SPViewController.m +++ b/sparrow/src/Classes/SPViewController.m @@ -484,6 +484,7 @@ - (void)setView:(SPView *)view { if (view != _internalView) { + if (_internalView) _internalView.viewController = nil; SP_RELEASE_AND_RETAIN(_internalView, view); [_previousViewPort setEmpty];