func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let person = people[indexPath.item]
let ac = UIAlertController(title: "Rename person", message: nil, preferredStyle: .Alert)
ac.addTextFieldWithConfigurationHandler(nil)
ac.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
ac.addAction(UIAlertAction(title: "OK", style: .Default) { [unowned self, ac] _ in
let newName = ac.textFields![0]
person.name = newName.text!
self.collectionView.reloadData()
})
presentViewController(ac, animated: true, completion: nil)
}
在上面这段代码中为什么需要[unowned self]
Empêcher les références circulaires de
当前VC(self) -> UIAlertController -> 闭包 -> 当前VC
De plus, le paramètre AC à l'intérieur de la fermeture doit également être faible ou sans propriété
Vous pouvez consulter la documentation officielle d'Apple
developer.apple.com/library
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID48
Pour ce code,
unowned
n'est pas nécessaire. Bien que la fermeture contienne une référence àself
,self
ne contient pas de référence à la fermeture, elle ne constitue donc pas une référence circulaire.