Swift Academy · Leçon

Références weak et unowned

Choisir entre weak (Optional) et unowned (non-Optional) pour rompre les cycles.

Leçon 3 sur 412 étapes

Références weak et unowned est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Bienvenue

Pour rompre les cycles de rétention, il faut utiliser des références qui n’incrémentent pas le compteur ARC. Swift en fournit deux : `weak` (facultative, remise automatiquement à zéro) et `unowned` (non facultative, dangereuse si elle vaut nil).

Références `weak`

```swift class Owner { var pet: Pet? } class Pet { weak var owner: Owner? } // does not retain var o: Owner? = Owner() var p: Pet? = Pet() o?.pet = p p?.owner = o o = nil // Owner deinit — p.owner becomes nil automatically ```

`weak` est toujours facultatif

```swift class View { weak var delegate: ViewDelegate? } ``` `weak` doit être `var` et facultatif — Swift le remet automatiquement à zéro lorsque l’objet référencé est désalloué.

Références `unowned`

```swift class Customer { var card: CreditCard? } class CreditCard { unowned let customer: Customer // card always has a customer init(customer: Customer) { self.customer = customer } } ``` `unowned` ne retient pas l’objet et n’est pas facultatif — vous garantissez que l’objet référencé survivra à celui-ci.

Choisir entre références faibles et non possédées

| Situation | Utilisation | |---|---| | L’objet référencé peut devenir nil | `weak` | | L’objet référencé survit toujours à celui-ci | `unowned` | | Vous hésitez | `weak` (plus sûr) |

Accéder à une référence `unowned` après désallocation

```swift var customer: Customer? = Customer() var card = CreditCard(customer: customer!) customer = nil print(card.customer.name) // 💥 crash — unowned is dangling ``` N’accédez jamais à `unowned` après la désallocation de l’objet référencé.

[weak self] dans les fermetures

```swift class VC { func load() { api.fetch { [weak self] data in guard let self else { return } self.render(data) } } } ``` `[weak self]` est la correction de cycle de rétention la plus courante en Swift.

[unowned self] dans les fermetures

```swift class Session { var onComplete: (() -> Void)? init() { onComplete = { [unowned self] in // self always outlives closure self.finish() } } } ``` Utilisez `[unowned self]` uniquement lorsque vous êtes certain que `self` ne sera pas nil lors de l’exécution de la fermeture.

Observation de la remise à zéro

```swift class Timer { weak var delegate: TimerDelegate? } var d: TimerDelegate? = ConcreteDelegate() let t = Timer() t.delegate = d d = nil print(t.delegate) // nil — automatically zeroed ```

Bonne pratique du modèle délégué

Déclarez toujours les propriétés de délégué comme `weak` : ```swift protocol MyDelegate: AnyObject { func didUpdate() } class MyView { weak var delegate: MyDelegate? } ``` La contrainte `AnyObject` est requise pour utiliser `weak` avec les protocoles.

Vérification rapide

Quel type de référence est automatiquement défini sur `nil` lorsque l’objet référencé est désalloué ?

Récapitulatif

Points clés : • `weak` — facultatif, remis automatiquement à zéro, sûr • `unowned` — non facultatif, garantit que l’objet référencé lui survivra, provoque un plantage en cas d’erreur • Modèles délégué : utilisez toujours `weak var delegate: Protocol?` avec une contrainte `AnyObject` • Fermetures : `[weak self]` est le modèle standard ; utilisez `guard let self` à l’intérieur • En cas de doute, choisissez `weak` plutôt que `unowned` Ensuite : les listes de capture des fermetures.
Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « Références weak et unowned » est-elle gratuite ?

Oui — le texte complet de « Références weak et unowned » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Références weak et unowned » ?

Choisir entre weak (Optional) et unowned (non-Optional) pour rompre les cycles. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Références weak et unowned » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Comment ARC compte les références
  2. Cycles de rétention : causes et détection
  3. Références weak et unowned
  4. Listes de capture des fermetures et [weak self]
← Retour à Swift Academy