ios - 过度使用公共(public)变量在两个 ViewController 之间进行通信

标签 ios swift avfoundation

我刚刚开始进入苹果 AVFoundation 包来创建一个使用相机的应用程序。我注意到,在我的代码中,我使用了大量的公共(public)变量来与控制实际 View 的苹果 CameraViewController 和我的 CameraVC 进行通信。例如:

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>!

我使用这些变量来连接 UI 上执行特殊任务的按钮,以及将图像/视频数据传递到我的其他 View Controller 。 (关闭当前图像/视频,将当前图像/视频发送到服务器)。我试图让自己使用最佳实践,但我想不出更好的解决方案。使用这些公共(public)变量会对我的应用程序的性能产生什么影响,如果可能的话,我怎样才能写得更好?

示例: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
}

最佳答案

这些属性是公共(public)的这一事实不会影响性能。当您设置 private 而不是 public 时,它在方法中更相关,这样编译器可以确定该方法是 final

性能的另一点 - 如果您将数据发送到服务器,正如您提到的那样,强烈建议您在后台队列中异步执行此操作(GCD)(如果您还没有这样做的话)。

至于以其他方式实现 - 需要了解整体情况。从我在这里看到的,您从字典中发送一个值以及 segue 和 enbaling/disable 按钮,这没有任何问题。只要你不在主线程上克隆/发送大部分图片/视频数据到服务器就可以。

最后一个提示 - 并不总是需要 PerformSegue - 如果您想将数据传递到下一个 ViewController 并调用它 - 您可以使用导航 Controller (当然,您的初始 View Controller 需要嵌入到导航 Controller 中)像这样的东西:

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)}}

关于ios - 过度使用公共(public)变量在两个 ViewController 之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45429253/

相关文章:

ios - 如何将字符串发送到另一个 View Controller

swift - 如何不重复Switch case? ( swift )

swift - AVAudioPlayerNode - 获取播放器状态?

ios - 试图用 `AVAssetExportSession` 分割视频

ios - 您需要 iOS 上的数据保护功能吗?

ios - 呈现 View Controller 会在其下方显示导航 Controller

ios - swift 全局变量在另一个类中保持为空

iOS - 录制的音频播放失败,OSStatus 错误 -43(找不到文件)

ios - UIBezierPath 绘制 iOS Swift 的性能更好?

ios - UITableViewCell Swift 中的动态 UICollectionViewCell