2010-07-12 91 views
2

恐怕這是一個抽象問題。我基本上正在編寫一個圍繞着寵物旋轉的iPhone遊戲,例如有點像電子狗。我創建了一個Pet對象,其中包含與寵物狀態相關的所有數據。程序的其餘部分訪問寵物的數據並執行相關操作。使用全局變量vs讀取和寫入文件

使用encodeWithCoder和initWithCoder方法將寵物保存到文件。因此,無論何時程序中的某個方法需要訪問任何寵物數據,它都會通過從文件中加載來創建寵物的新實例。如果有更改,則在Pet類的方法內完成。這些方法總是通過將寵物寫入文件來結束。

因此,程序運行時,每次進行更改時都會不斷寫入文件和讀取文件。如果我想向寵物添加一個新變量,比如稱爲showReaction的BOOL變量(以確定是否顯示寵物對特定事件的反應),我必須將這個變量包含在我的encodeWithCoder和initWithCoder方法中。這看起來有點麻煩,因爲這些方法因此越來越大。不斷讀寫文件似乎效率低下。

我會想一個更好的方法是有一個代表寵物的全局變量。而且程序中的任何方法都可以訪問這個全局變量來改變它。我寫入文件的唯一時間是玩家退出遊戲時,並且在遊戲加載時我只從文件讀取一次。

我的問題是 - 我不完全確定最好的方法。不管這是不是很好的編程習慣?我應該在我的主ViewController中聲明全局變量,然後在程序運行期間不要釋放它?我將能夠更改Pet類中的變量,並在程序運行期間保留此數據。即在一種方法中將showReaction設置爲TRUE,以另一種方法讀取它並將其設置爲FALSE ...

任何建議將不勝感激。我一直在寫這個程序一段時間,並且想知道是否應該在進一步處理任何不好的做法之前立即做出這些改變。但考慮到我的代碼的大小,我不想在沒有先諮詢專家的情況下嘗試太多!

感謝,

邁克爾

回答

1

你爲什麼不創建一個單身?這樣你的代碼就不用擔心它是如何完成的。嘗試解耦你的代碼。

+0

啊我看到了 - 單身呃。我以前並不知道這樣的事情。雖然在這個論壇上看過一點點,但似乎有一點反單態的情緒。我會進一步研究它,但是謝謝你的建議:) – Smikey 2010-07-12 14:08:45

+0

是的,單獨使用singleton模式太糟糕了,也許你的設計是錯誤的,但是你現在遇到的問題可以通過實現一個singleton來解決模式...它比使用全局變量更好,並且具有有效用途,只是不要將它們當作魔術解決所有問題的解決方案。 – 2010-07-12 15:18:05

+0

對不起,我應該說的 - 使用太多的單身人士是不好的。 – 2010-07-13 11:46:57

0

我認爲它有點難以在抽象層面說的話最好是在你的情況,但往往什麼似乎簡單的往往是最好的辦法。只有與您交互的全局實例似乎是一個非常簡單的方法。