Ich erkannte, dass die doppelte Überprüfung in Java aufgrund des Speichermodells fehlerhaft ist, aber das ist normalerweise mit dem Singleton-Muster verbunden und optimiert die Erstellung des Singleton.double checked locking - objectiv c
Was ist unter diesem Fall in Objective-C:
Ich habe einen boolean-Flag, um zu bestimmen, ob meine Anwendungsdaten gestreamt oder nicht. Ich habe 3 Methoden, startStreaming, stopStreaming, streamingDataReceived und ich sie von mehreren Threads schütze Verwendung:
- (void) streamingDataReceived:(StreamingData *)streamingData {
if (self.isStreaming) {
@synchronized(self) {
if (self.isStreaming) {
- (void) stopStreaming {
if (self.isStreaming) {
@synchronized(self) {
if (self.isStreaming) {
- (void) startStreaming:(NSArray *)watchlistInstrumentData {
if (!self.isStreaming) {
@synchronized(self) {
if (!self.isStreaming) {
Ist das überprüfen uneccessary? Hat die Doppelprüfung in objective-c ähnliche Probleme wie in Java? Was sind die Alternativen zu diesem Muster (Anti-Pattern).
Dank
Können Sie diese Antwort begründen? –
Sie können die Antwort erweitern, um Vorschläge für Alternativen hinzuzufügen. Gibt es zum Beispiel in Objective-C ein Äquivalent zu "transient" oder AtomicInteger/etc? –