gpt4 book ai didi

Objective-C:重构代码 - 如何获取指向 View 实例的指针?

转载 作者:行者123 更新时间:2023-12-03 16:58:12 24 4
gpt4 key购买 nike

我对 OOP 的经验不是很丰富,所以我想分享我目前正在做的事情,并就我应该如何做一些事情寻求一些建议。

我目前正在开发一个使用 2d 网格的简单游戏。以下是我的类结构的快速概述:

  • “GameBoard”- 具有游戏可能的单元状态数组以及实现规则的方法。
  • 'GameView' - 具有父类(super class) NSView,并作为自定义 View 放置在我的窗口中。此类旨在从游戏板读取数据,并通过将凝视映射到其drawRect:方法中的图像枚举来绘制数组的内容。
  • 'GameController' - 这是一个中间类,用于初始化游戏板和 View ,并处理各种 UI 控件。此类具有“GameBoard”和“GameView”类型的实例变量。

最初,我几乎在 View 类中完成了所有操作,并且它运行良好,但它开始变得很难理解,这是我想要将代码分布到新类中的主要原因。

我在“GameController”中创建了一个方法,该方法使用一些用户定义的参数(在代码片段中删除以节省空间)来初始化新游戏。

-(IBACTION)initialiseGame:(id)sender {
gameBoard = [[GameBoard alloc] init...];
gameView = [[GameView alloc] init...];
}

我想要在这里做的是将游戏 View 传递给游戏板实例的指针,以便我可以读取它的数组来绘制游戏的当前状态,例如:

-(void)initWithGameBoard:(GameBoard*)gameBoard;

这是正确的方法吗,还是我应该以不同的方式来做这件事?

我移动到 Controller 类的下一个问题是,我似乎不知道如何获取指向我放置在 IB 窗口上的 GameView 实例的指针?是否最好不要将 View 放置在界面生成器中的窗口上,而是在initialiseGame 函数中以编程方式将其放置在窗口上?如果是这样我该怎么做?

我想另一个问题是,我是否应该放弃这个想法并坚持在 GameDraw 类中完成所有操作?

非常感谢您花时间阅读本文,这对于任何有经验的面向对象程序员来说可能都是一个非常简单的问题,但我似乎无法在任何地方找到具体的答案。

最佳答案

有不止一种方法可以完成这项工作,但我会这样做:

  1. 在 IB 中实例化 View 一次。不要自己调用 alloc/init。
  2. 在 View Controller 中,为 View 创建一个 socket 并在 Interface Builder 中连接它。这就是您的 Controller 访问它的方式。您的 View Controller 需要是文件所有者 - 可能已经是。
  3. 将 View 设计为可重用。为其提供一个 -setGameBoard: 方法供 Controller 调用。确保 View 在没有游戏板时可以绘制空白内容。
  4. 像这样编写-initializeGame::

    -(IBAction) initialiseGame:(id) sender {
    gameBoard = [[GameBoard alloc] init...];
    [gameView setGameBoard:gameBoard];
    }

关于Objective-C:重构代码 - 如何获取指向 View 实例的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13456143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com