2014-06-08 72 views
0

讓我先來看看我的情況。我有一個ViewController,它保留了一個GameManager的實例。 GameManager類封裝了一個簡單遊戲的狀態和邏輯。當在GameManager中遇到某些狀態時,我想執行一組操作。例如:遊戲結束時,我想通過對話框顯示遊戲。如上所述,遊戲邏輯駐留在GameManager中,但創建和定位新的「遊戲結束」對話框的方法駐留在ViewController中。爲了允許GameManager'調用'回到ViewController中,我在分配時將對ViewController的引用傳遞給了GameManager,並且簡單地調用了ViewController上的方法。例如:如何允許iOS視圖控制器中的雙向通信?

// GameManager.m 
- (void) gameOver { 
    [self.viewController showGameOver]; 
} 

我的問題是:這是正確的,客觀的方式來做到這一點?有一種更純粹的方式來處理這個問題嗎?我雖然使用塊可能更合適。

+1

不一定是你的問題,但要確保你在'self.viewController'引用上有一個'weak'屬性。否則,因爲'viewController'持有'gameController'並且'gameController'持有'viewController',所以都不會放過,你會得到內存泄漏。 – Logan

+0

感謝您的提示。我想到了這一點。 – user3720455

回答

0

在viewContoller類實現這裏

一個delegation模式在你的遊戲管理

@protocol MyGameDelegate : <NSObject> 

@required 

- (void)gameManager(GameManager *)gameManager gameOverWithSuccess:(BOOL)success; 

@end 

和聲明屬性

@property (assign, nonatomic) id <MyGameDelegate> gameDelagate; 

// MyGameDelegate implementation 

- (void)gameManager(GameManager *)gameManager gameOverWithSuccess:(BOOL)success { 

    if (success) [self.viewController showGameOver]; 
} 

做這樣的事情,但要小心

@property (assign, nonatomic) id <MyGameDelegate> gameDelagate; 

有您使用strong

最後,設置gameDelagate爲您的視圖 - 控制not

希望你明白。

+0

這太好了。我很欣賞這個解釋。它現在可以工作,但我一直在尋找最合適的方式來處理事情。這真的有幫助。 – user3720455

相關問題