Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct AppEmitter {
- class Controller {
- var name: String
- init() { name = "Bee" }
- deinit { print("controller deinit") }
- func method() {
- let task = Task { wordfromweb in
- self.name = wordfromweb
- print("I am: \(self.name), and I alive")
- }
- task.start()
- }
- }
- struct Task {
- let handler: (String) -> Void
- init(handler: @escaping (String) -> Void) {
- self.handler = handler
- }
- func start() {
- let queue = DispatchQueue(label: "Network")
- queue.async {
- let simaphore = DispatchSemaphore(value: 0)
- _ = simaphore.wait(timeout: DispatchTime.now() + 1)
- // Здесь всё значение структуры Task вместе с хендлером, в котором запечена ссылка на Controller
- // запекасется в тред и не освобождается, пока этот метод не закончится
- self.handler("Ant")
- }
- }
- }
- func run() {
- var controller: Controller? = Controller()
- controller?.method()
- controller = nil
- let simaphore = DispatchSemaphore(value: 0)
- _ = simaphore.wait(timeout: DispatchTime.now() + 2)
- // I am: Ant, and I alive
- // controller deinit
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement