У Swift 1.2 є новий атрибут з параметрами закриття у функціях, і як сказано в документації:
Це вказує на те, що параметр викликається лише коли-небудь (або передається як параметр @ noescape у виклику), що означає, що він не може пережити термін дії виклику.
У моєму розумінні, до цього ми могли б використовувати, [weak self]
щоб не дозволити закриттю мати чітке посилання, наприклад, на свій клас, а self може бути нульовим або екземпляр, коли закриття виконується, але тепер це @noescape
означає, що закриття ніколи не буде виконано якщо клас деініталізований. Чи правильно я це розумію?
І якщо я @noescape
прав , чому б я використовував закриття, передбачене регулярною функцією, коли вони поводяться дуже схоже?
@noescape
гарантує, що закриття не буде ... використовуватися асинхронно". А це означає, що ви не можете використовувати його з мережевим кодом, який спрацьовує асинхронно.