Skip to content

Commit

Permalink
view controller assignment cycle fix
Browse files Browse the repository at this point in the history
  • Loading branch information
racarone committed Apr 15, 2016
1 parent af7b638 commit 61ab8f6
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 17 deletions.
2 changes: 1 addition & 1 deletion sparrow/src/Classes/SPView.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
29 changes: 13 additions & 16 deletions sparrow/src/Classes/SPView.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,16 @@
#import "SPView_Internal.h"
#import "SPViewController_Internal.h"

#import <objc/runtime.h>

@interface SPView ()

@property (nonatomic, weak) SPViewController *viewController;

@end


@implementation SPView
{
SPViewController __weak *_viewController;
}

@dynamic layer;

Expand Down Expand Up @@ -52,33 +58,24 @@ - (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
{
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
1 change: 1 addition & 0 deletions sparrow/src/Classes/SPViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,7 @@ - (void)setView:(SPView *)view
{
if (view != _internalView)
{
if (_internalView) _internalView.viewController = nil;
SP_RELEASE_AND_RETAIN(_internalView, view);
[_previousViewPort setEmpty];

Expand Down

0 comments on commit 61ab8f6

Please sign in to comment.