2 Stimmen

Kann mein Singleton verbessert werden?

Ich bin relativ neu in Bezug auf iOS 5 Singletons und verwende ein Singleton wie hier dokumentiert:

iOS 5 Singletons

So etwas wie dieses:

MyManager.h

#import 
@interface MyManager : NSObject

//Daten für Abschnitt 1
@property(nonatomic,copy) NSString * section1a;
@property(nonatomic, assign) NSUInteger section1b;

//Daten für Abschnitt 2
@property(nonatomic,copy) NSString * section2a;
@property(nonatomic, assign) NSUInteger section2b;

+ (id)sharedInstance;
@end

MyManager.m

@implementation MyManager
@synthesize section1a, section1b, section2a; , section2b;

+ (id)sharedInstance
{
    static dispatch_once_t pred = 0;
    __strong static id _sharedObject = nil;
    dispatch_once(&pred, ^{
        _sharedObject = [[self alloc] init]; // oder eine andere Init-Methode
    });
    return _sharedObject;
}
@end

Also benutze ich es wie folgt:

MyManager * myManager = [MyManager sharedInstance];
myManager.data = self.data

Verwendest du das Singleton normalerweise so? Habe ich etwas übersehen? Entschuldigung für die einfachen Fragen, ich möchte nur sicherstellen, dass ich es richtig mache.

Danke

1voto

iSofTom Punkte 1718

Dies ist kein Singleton, weil du mehrere Instanzen dieser Klasse mit den alloc/init Methoden erstellen kannst. Eine richtige Antwort findest du hier

1voto

Andreas Ley Punkte 8894

Du machst es richtig. Dies ist (derzeit :) der richtige Weg und funktioniert gut mit aktiviertem ARC, mehreren Threads usw.

Es ist zwar nicht strikt ein Singleton, da du mehr Instanzen der Klasse erstellen kannst, aber ich glaube nicht, dass das in deinem Fall relevant ist.

0voto

Nosrettap Punkte 10740

Normalerweise erstelle ich mein Singleton wie folgt (angenommen, wir erstellen ein Singleton für Manager):

static (Manager *) instanz;

+ (Manager *) erhaltenInstanz
{
    if(!instanz) instanz = [[Manager alloc] init];
    return instanz;
}

Dies ist ein sehr einfaches Singleton (es berücksichtigt keine Mehrfachgewindeverarbeitung oder andere fortgeschrittene Funktionen), aber dies ist das grundlegende Format.

0voto

Καrτhικ Punkte 3733

Beziehen Sie sich auf dieses: Singleton in iOS 5? Sie sollten allowWithZone überschreiben, um zu verhindern, dass Schurken-Code eine neue Instanz erstellt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X