@class Chunk; @protocol ChunkDelegate @required - (CGFloat)heightForChunk:(Chunk *)chunk; @end @interface ChunkController () @property (nonatomic, strong) Game *game; @end @implementation ChunkController - (void)createChunks; { // create chunks here Chunk *chunk = [[Chunk alloc] initWithDelegate:self] } - (CGFloat)heightForChunk:(Chunk *)chunk; { // calculate height for the chunk here } @end @interface Chunk @property (nonatomic, weak) id delegate; - (instancetype)initWithDelegate:(id)delegate; @end @implementation Chunk - (instancetype)initWithDelegate:(id)delegate; { self = [super init]; if (self) { self.delegate = delegate; } return self; } @end