Advertisement
SEEEEEAAAAAA10000000

Untitled

Feb 5th, 2019
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.50 KB | None | 0 0
  1. struct AppEmitter {
  2.    
  3.     class Controller {
  4.         var name: String
  5.         init() { name = "Bee" }
  6.         deinit { print("controller deinit") }
  7.         func method() {
  8.             let task = Task { wordfromweb in
  9.                 self.name = wordfromweb
  10.                 print("I am: \(self.name), and I alive")
  11.             }
  12.             task.start()
  13.         }
  14.     }
  15.    
  16.     struct Task {
  17.        
  18.         let handler: (String) -> Void
  19.        
  20.         init(handler: @escaping (String) -> Void) {
  21.             self.handler = handler
  22.         }
  23.        
  24.         func start() {
  25.             let queue = DispatchQueue(label: "Network")
  26.             queue.async {
  27.                 let simaphore = DispatchSemaphore(value: 0)
  28.                 _ = simaphore.wait(timeout: DispatchTime.now() + 1)
  29.                 // Здесь всё значение структуры Task вместе с хендлером, в котором запечена ссылка на Controller
  30.                 // запекасется в тред и не освобождается, пока этот метод не закончится
  31.                 self.handler("Ant")
  32.             }
  33.         }
  34.     }
  35.    
  36.     func run() {
  37.         var controller: Controller? = Controller()
  38.         controller?.method()
  39.         controller = nil
  40.         let simaphore = DispatchSemaphore(value: 0)
  41.         _ = simaphore.wait(timeout: DispatchTime.now() + 2)
  42.  
  43.         // I am: Ant, and I alive
  44.         // controller deinit
  45.     }
  46.    
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement