È possibile implementare il conteggio del semaforo nell'applicazione ios?Come implementare i semafori nell'applicazione iOS?
5
A
risposta
14
Sì, è possibile. Ci sono alcuni strumenti di sincronizzazione disponibili:
- @synchronized
- NSLock
- NSCondition
- NSConditionLock semafori
- GCD
- serrature pthread
- ...
Suggerirei di leggere "Threading Programming Guide" e di chiedere qualcosa di più specifico.
4
non sono riuscito a trovare un oggetto nativo IOS per fare questo, ma funziona bene utilizzando la libreria C:
#import "dispatch/semaphore.h"
...
dispatch_semaphore_t activity;
...
activity = dispatch_semaphore_create(0);
...
dispatch_semaphore_signal(activity);
...
dispatch_semaphore_wait(activity, DISPATCH_TIME_FOREVER);
Speranza che aiuta.
6
Ti piace questa:
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[self methodWithABlock:^(id result){
//put code here
dispatch_semaphore_signal(sem);
[self methodWithABlock:^(id result){
//put code here
dispatch_semaphore_signal(sem);
}];
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
credito http://www.g8production.com/post/76942348764/wait-for-blocks-execution-using-a-dispatch
3
In Swift 3 è possibile utilizzare un DispatchSemaphore
.
// initialization
let semaphore = DispatchSemaphore(value: initialValue)
// wait, decrement the semaphore count (if possible) or wait until count>0
semaphore.wait()
// release, increment the semaphore count
semaphore.signal()
Problemi correlati
- 1. Consenti solo 3 istanze di un'applicazione utilizzando i semafori
- 2. Come implementare i badge?
- 3. Elimina tutta la memoria condivisa e i semafori su Linux
- 4. Semafori e threadpool in Java
- 5. iOS: come implementare il riconoscimento della calligrafia?
- 6. Come implementare voice over ip in iOS?
- 7. Deadlock nel codice Java con i semafori e acquisire (int)
- 8. Problemi di riferimento non definiti utilizzando i semafori
- 9. Come implementare i pagamenti NFC?
- 10. Implementazione di semafori, blocchi e variabili di condizione
- 11. Differenza tra variabili di completamento e semafori
- 12. Processi paralleli che utilizzano semafori in C
- 13. Implementare Google Analytics in ios swift
- 14. Come implementare l'SDK di Google Maps per iOS
- 15. Come implementare i tag in Symfony 2?
- 16. Come implementare correttamente i cheat codes?
- 17. Come implementare i callback in Java
- 18. Come implementare i dati temporali in MySQL
- 19. Come implementare i tag post in Mongo?
- 20. Come implementare i numeri binari in Haskell
- 21. Come implementare correttamente i plugin in C#?
- 22. come implementare i macro in java
- 23. Come implementare i servizi Web in java
- 24. Come implementare i sottocomandi usando Boost.Program_options?
- 25. Come implementare un MKPointAnnotable trascinabile usando Swift (IOS)?
- 26. Come progettare e implementare l'autenticazione della password per IOS?
- 27. Consigli su come implementare slideshow di immagini/carosello? (iOS)
- 28. Come posso implementare iOS con RTL per l'arabo ebraico?
- 29. Come implementare e comunicare tramite websocket in un'app per iOS?
- 30. come implementare e mostrare Sound Ampiezza graficamente su iOS?
e OSSpinLock. – Jano
@synchonized è il mio preferito. Usalo con un oggetto globale come un NSNumber statico se non ci sono oggetti ovvi su cui bloccare. Attaccare a un modello di semaforo probabilmente faciliterà la leggibilità, ecc. –
La sincronizzazione su un oggetto globale è una cattiva idea. Non sai se anche altri codici potrebbero essere sincronizzati su di esso in modo da esporsi al rischio di deadlock. Sincronizza sempre su qualcosa con visibilità limitata che è esplicitamente per l'attività in corso. Inoltre, non sincronizzarsi mai su se stessi; ancora, non sai cos'altro potrebbe usare lo stesso oggetto. – occulus