ios - 使用storyboard建立tableview运行时代码运行了三次是什么情况?
PHP中文网
PHP中文网 2017-04-18 09:47:07
0
2
579
import UIKit

class TaskListController: UITableViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
       
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        print("Test")
        return 0
    }
}
PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(2)
巴扎黑

Ce code est exécuté autant de fois que votre tableview est chargée. Exécuté une fois lors de la configuration de la source de données, puis exécuté une fois à chaque chargement

override func numberOfSections(in tableView: UITableView) -> Int {
       
        return 1
    }

Le nombre de fois que le code ci-dessous est exécuté dépend du nombre de sections dont vous disposez. Il sera exécuté autant de fois que vous avez de sections, et après chaque chargement, il sera chargé en fonction du nombre de sections dans votre tableview actuelle.

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        print("Test")
        return 0
    }

Ce qui précède est la logique du nombre d'exécutions de code.
Votre question. Théoriquement parlant, votre stroyboard contient généralement des données. Même s'il n'y a pas de données, il s'exécutera une fois (ou plusieurs fois s'il y a des données). Cela est dû au pointeur de source de données par défaut. Dans le code, si vous définissez la source de données, elle se rechargera naturellement. Il a donc été exécuté plusieurs fois. Pour le développement iOS, le code pur est toujours recommandé.

Peter_Zhu

Le test iOS 10.1 a été exécuté 5 fois...
Je pense qu'il n'est pas nécessaire de s'attarder là-dessus. Nous ne savons pas que TableView est passé par une série de processus depuis l'initialisation jusqu'à son apparition à l'écran, et cela ne devrait pas suffire pour l'obtenir une seule fois. Oui, Apple ne conservera probablement pas cette valeur.
Je ne vois rien dans la pile d'appels du point d'arrêt... Je crois comprendre que la table peut être demandée au délégué à chaque fois qu'elle est nécessaire, et il n'y aura aucun impact sur les performances. Si vous voulez aller au fond des choses, il faudra probablement regarder le code source...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal