我對OOP並不是很有經驗,所以我想分享我目前正在做的事情,並要求提供一些關於如何去做幾件事的建議。Objective-C:重構代碼 - 如何獲取指向視圖實例的指針?
我目前正在使用2d網格的簡單遊戲。以下是我的班級結構快速概覽:
- 'GameBoard'具有遊戲的可能單元狀態數組以及實現規則的方法。
- 'GameView' - 擁有超類NSView,並作爲自定義視圖放置在我的窗口中。這個類打算從遊戲板上讀取數據,並通過將凝視映射到drawRect:方法中的枚舉圖像來繪製數組的內容。
- 'GameController' - 這是一箇中級類,用於初始化遊戲板和視圖,並處理各種UI控件。這個類有'GameBoard'和'GameView'類型的實例變量。
本來,我是做在View類幾乎一切,本來它的工作不錯,但它開始變得實在難以遵循,這是我的希望在一個新的類傳播我的代碼主要原因。
我在'GameController'中創建了一個方法,用一些用戶定義的參數(在片段中刪除以節省空間)初始化新遊戲。
-(IBACTION)initialiseGame:(id)sender {
gameBoard = [[GameBoard alloc] init...];
gameView = [[GameView alloc] init...];
}
我想在這裏做的是通過遊戲顯示的指針遊戲板實例,這樣我可以讀取它的陣列來繪製遊戲的當前狀態,是這樣的:
-(void)initWithGameBoard:(GameBoard*)gameBoard;
這是否是正確的方式去做,或者我應該以不同的方式做到這一點?
我轉移到控制器類的下一個問題是,我似乎無法找到如何獲取指向我在IB窗口中放置的GameView實例的指針?最好不要將視圖放在界面構建器的窗口中,而是將其放置在窗口中以編程方式在initialiseGame函數中?如果是的話,我會怎麼做呢?
我想另外一個問題是,我是否應該放棄這個想法並堅持在GameDraw類中做所有事情?
非常感謝您花時間閱讀本文,這對任何有經驗的面向對象程序員來說可能都是一個非常簡單的問題,但我似乎無法在任何地方找到答案。
第一個問題:是的,我通常會使用它本身調用其超類的初始化方法定製initWithSomething init方法。 –
第二個問題。請更具體一些或提供更多的代碼。你的GameController是UIViewController的一個子類嗎?或者它是一些從任何View中分離出來的NSObject? Plus:您使用Interface Builder(IB)還是以編程方式創建所有視圖對象? –
嗨,謝謝你的回覆。 GameController類目前只是NSObject的一個子類。我使用IB來創建所有UI對象,並將GameView添加到窗口中。是否有可能獲得指向窗口上的實例的指針,或者我應該以其他方式做這件事? – tom1990