2015-04-22 77 views
1

我對設計模式非常陌生,所以我需要幫助確定設計我正在開發的iOS應用程序的特定部分的好方法。用戶類設計

我有一個用戶對象,表示已登錄的用戶這是非常簡單的,看起來像這樣:

class User { 
    var firstName: String 
    var lastName: String 
    var photo: String //must be stored as a string for the filename. 
    var listOfJoinedOpportunities = [Opportunity]() 
    var listOfJoinedOpportunitiesKeys = [String]() 
    var listOfFriendsOnTheApp: NSArray 
    var bio: String 
    var email: String 
    var userID: String //A unique ID that is used to persist data about the user to the database (Firebase). 


    init(firstName: String, lastName: String, photo: String, email:String, userID: String, joinedEvents: [Opportunity],joinedStrings: [String]){ 
    self.firstName = firstName 
    self.lastName = lastName 
    self.photo = photo 
    self.listOfJoinedOpportunities = joinedEvents 
    self.listOfFriendsOnTheApp = [] 
    self.listOfJoinedOpportunitiesKeys = [] 
    self.bio = "" 
    self.email = email 
    self.userID = userID 
    } 
} 

目前我只需要一個代表登錄的一個實例用戶,但我可以預見如果我添加功能與應用程序的其他用戶交互需要這個類。

總共5個視圖包括需要讀取和寫入表示登錄用戶的用戶對象的交互。

目前,我正在通過創建新引用將控制器中的對象傳遞給控制器​​。或者,我正在創建一個新的對象,它代表已保存到數據庫的數據(Firebase)中的相同登錄用戶。

請幫忙!

回答

0

將對象傳遞到目標視圖實際上是處理此問題的首選方法(prepareForSegue)。話雖如此,你也可以簡單地將用戶對象實例存儲在你的AppDelegate中,並且如果這符合你的模型,可以很容易地從任何視圖中引用它。

在App Delegate中存儲引用的缺點是混亂,在更復雜的情況下可能沒有必要,因爲它們將始終被分配(查找延遲加載以及)。一般而言,您希望一起傳遞對象,以便以前的視圖可以取消分配,從而降低您的內存佔用量。這樣,如果您收到內存警告,您可以正確處理它以正確恢復。

// Set a var in your appDelegate 
var user:User? 

// Accessing it from any view 
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
let loggedInUser = appDelegate.user 
+0

很酷。這一切都對我有意義。但它引出了一個問題:這些方法的優缺點是什麼?在選擇另一種設計時應考慮哪些因素? – turbs

+0

他告訴你的優點和缺點... – user1093111