Ios 是否将Self-ViewController作为参数传递?

Ios 是否将Self-ViewController作为参数传递?,ios,swift,Ios,Swift,我的应用程序中有一个TableView,我通过JSON填充它,JSON是在DataService类中下载的。这个DataService类只执行下载并将数据保存到数组操作 在我的ViewController类中,我还有一个用于该数据的数组,该数组在开始时初始化为空,随后填充来自DataService的数据。因为下载操作完成后,我需要填充数据数组(ViewController类中的数组),所以DataService类需要到达这个数组。所以我决定将ViewController对象本身传递给DataSe

我的应用程序中有一个TableView,我通过JSON填充它,JSON是在DataService类中下载的。这个DataService类只执行下载并将数据保存到数组操作

在我的ViewController类中,我还有一个用于该数据的数组,该数组在开始时初始化为空,随后填充来自DataService的数据。因为下载操作完成后,我需要填充数据数组(ViewController类中的数组),所以DataService类需要到达这个数组。所以我决定将ViewController对象本身传递给DataService类,这样它就可以用下载的数据填充VC的数组,并重新加载其tableView数据

因此,我的DataService类如下所示:

var dataArray: [EtkinlikCellData] = []

func fetchData(senderVC: EtkinliklerVC)  {

  // Download & fill dataArray operations

  senderVC.dataArray = self.dataArray // setting sender VC's array
  senderVC.tableView.reloadData() // reloading sender VC's table data

}
它是如何在ViewController类中使用的:

var dataArray = [EtkinlikCellData]()

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self 
    DataService.instance.fetchData(senderVC: self)

}

我知道,如果直接在ViewController类中执行fetch操作,就不会有问题,因为fetchData()方法将到达dataArray和tableView对象本身。但由于它在另一个类中,将ViewController对象作为参数传递会是错误的还是有害的?谢谢。

唯一的威胁是保留循环,您可以通过弱引用对象(如

选项1://问题模型不应包含任何UI内容

weak var delgate:EtkinliklerVC?
fetchData(senderVC: EtkinliklerVC)  {
 self.delegate = senderVC

 ....
 self.delegate?.dataArray = self.dataArray  
 self.delegate?.tableView.reloadData() 
选项2:

确定完成时间(推荐)

然后使用它

DataService.instance.fetchData() { [weak self] arr in
 // set it and reload
}
加号:


假设您将当前代码保持原样,因为singleton处于活动状态,这意味着它被强烈保留,您将vc对象传递给它,用户打开vc,在返回数据之前,他在vc中按下了back按钮,因为singleton和vc之间没有弱引用,然后vc仍将在内存中,而它应该被取消分配

唯一的威胁是保留周期,您可以通过弱引用对象来避免它,如

选项1://问题模型不应包含任何UI内容

weak var delgate:EtkinliklerVC?
fetchData(senderVC: EtkinliklerVC)  {
 self.delegate = senderVC

 ....
 self.delegate?.dataArray = self.dataArray  
 self.delegate?.tableView.reloadData() 
选项2:

确定完成时间(推荐)

然后使用它

DataService.instance.fetchData() { [weak self] arr in
 // set it and reload
}
加号:


假设您将当前代码保持原样,因为singleton处于活动状态,这意味着它被强烈保留,您将vc对象传递给它,用户打开vc,在返回数据之前,他在vc中按下了back按钮,因为singleton和vc之间没有弱引用,那么vc仍将在内存中,而它应该被取消分配

谢谢,您也可以解释更多关于选项1的信息吗?在已经接收到VC对象后,将其设置为弱var有什么意义?搜索保留周期。执行方法后,VC参数不是会自动从内存中删除吗?因为我没有把它保存到一个全局变量中?不,闭包建立了一个对它的强引用谢谢,你也能解释更多关于选项1的内容吗?在已经接收到VC对象后,将其设置为弱var有什么意义?搜索保留周期。执行方法后,VC参数不是会自动从内存中删除吗?因为我没有将它保存到全局变量?不,闭包建立了对它的强引用