2017-08-01 30 views
0

我剛開始進入apple AVFoundation包以使用相機創建應用程序。我注意到,在我的代碼中,我使用了相當數量的公共變量與Apple CameraViewController和我的CameraVC進行通信,以控制實際視圖。例如:過度使用兩個ViewControllers之間的公共變量

public var _photoButton: UIButton! 

public var _imageTaken: UIImageView! 

public var _sendBtn: UIButton! 

public var _dismissBtn: UIButton! 

public var _videoDismissBtn: UIButton! 

public var _videoSendBtn: UIButton! 

public var photoData: Dictionary<String, Data>! 

我使用這些變量與按鈕我有我的用戶界面,執行特殊任務連接,藏漢爲到我的其他的ViewController通過圖像/視頻數據。 (關閉當前的圖像/視頻,將當前的圖像/視頻發送到服務器)。我試圖堅持使用最佳實踐,但我無法想到更好的解決方案。使用這些公共變量會對我的應用程序的性能產生什麼影響,如果可能,我該如何更好地編寫這些內容?

實施例:CameraVC(未蘋果CameraViewController)

@IBAction func sendBtnPressed(_ sender: Any) { 
    performSegue(withIdentifier: "FriendsVC", sender: ["snapshotData": photoData.removeValue(forKey: "photoData")]) 
    self.view.insertSubview(previewView, aboveSubview: imageTaken) 
    self.sendBtn.isHidden = true 
    self.sendBtn.isEnabled = false 
    self.dismissBtn.isEnabled = false 
    self.dismissBtn.isHidden = true 
} 

    @IBAction func dismissBtnPressed(_ sender: Any) { 
    self.view.insertSubview(previewView, aboveSubview: imageTaken) 
    self.sendBtn.isHidden = true 
    self.sendBtn.isEnabled = false 
    self.dismissBtn.isEnabled = false 
    self.dismissBtn.isHidden = true 
    self.photoData = nil 
    return 
} 
+0

您可以在您嘗試傳遞這些變量的位置添加代碼嗎?其實這些可以保密。並且可以提供包裝方法來修改它們。 –

+0

當然,這裏是一個例子 – Chris

回答

0

,這些性質是公衆不影響性能的事實。它與方法更相關,當你設置private而不是public,這樣編譯器可以確定這個方法是final。性能的另一點 - 如果您向服務器發送數據(如您所提及的那樣),強烈建議您在後臺隊列中異步執行此操作(GCD)(如果尚未完成此操作)。

至於實施否則 - 需要看整個圖像。從我在這裏看到的,你可以從你的詞典中發現一個價值,隨着時間和enbaling /禁用按鈕,沒有什麼不妥。只要你不在主線程克隆/發送到服務器的大部分圖片/視頻數據,沒關係。

最後的提示 - 不需要總是執行 - 如果你想傳遞數據到下一個ViewController並調用它 - 你可以使用導航控制器(你的初始視圖控制器需要嵌入導航控制器當然)類似於:

if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NextViewController") as? NextViewController{ 
if let navigator = self.navigationController{ 
    vc.someProperty = someDataToPass 

    navigator.pushViewController(vc, animated: true)}} 
+0

感謝您的迴應,我解析模型中的數據,然後將其發送到我的Firebase存儲。感謝您的回覆,我將與導航控制器一起玩,看看它是如何工作的 – Chris

相關問題