Objective-C - sample-Singleton-Implementierung

*Ich brauche definitiv eine Pause... denn es war einfach - array nicht zugewiesen... Danke für die Hilfe. Weil der peinliche Fehler, die ich markiert meinen post um es zu löschen. Ich finde es auch nicht nützlich für Benutzer 😉 *

Ich habe gerade versucht, eine singleton-Klasse in iOS, aber das bin ich wahrscheinlich bin ich einen Fehler zu machen. Code (kein ARC ist eine Voraussetzung):

#import "PeopleDatabase.h"
#import "Person.h"

#import <Foundation/Foundation.h>

@interface PeopleDatabase : NSObject{objetive
    NSMutableArray* _arrayOfPeople;
}

+(PeopleDatabase *) getInstance;

@property (nonatomic, retain) NSMutableArray* arrayOfPeople;


@end

--

    @implementation PeopleDatabase
    @synthesize arrayOfPeople = _arrayOfPeople;

    static PeopleDatabase* instance = nil;

    -(id)init{
        if(self = [super init]) {
            Person* person = [[[Person alloc] initWithName:@"John" sname:@"Derovsky" descr:@"Some kind of description" iconName:@"johnphoto.png" title:Prof] retain];

            [_arrayOfPeople addObject:person];
            NSLog(@"array count = %d", [_arrayOfPeople count]); //<== array count = 0 
            [person release];
        }
        return self;
    }

    +(PeopleDatabase *)getInstance {
        @synchronized(self)
        {
            if (instance == nil)
                NSLog(@"initializing");
                instance = [[[self alloc] init] retain];
                NSLog(@"Address: %p", instance);
        }
        return(instance);
    }

    -(void)dealloc {

        [instance release];
        [super dealloc];
    }
@end

Beim aufrufen der getInstance wie hier:

PeopleDatabase *database = [PeopleDatabase getInstance];
NSLog(@"Adress 2: %p", database);

Adresse 2 Wert den gleichen Wert wie im getInstance.

  • Was genau meinst du mit "Adresse 2-Wert den gleichen Wert wie im getInstance." ?
  • es sollte die gleiche Adresse.. da es das gleiche Objekt? das Objekt, das Sie wieder in getInstance ist der einer Datenbank zugewiesen wurde.
  • Siehe die Antwort.
  • in dieser Funktion +(PeopleDatabase *)getInstance ich denke, Sie müssen die geschweiften Klammern richtig : so +(PeopleDatabase *)getInstance { @synchronized(self) { if (instance == nil) { NSLog(@"Initialisierung"); instance = [[[self alloc] init] retain]; NSLog(@"Adresse: %p", instance); } } return instance; }
  • Was ist dein problem? Was ist die vollständige Ausgabe? Und wo tun Sie alloc/init _arrayOfPeople?
  • Ja. Habe ich erwähnt, dass, um beachten Sie, dass die Instanz zurückgegeben wird, richtig.
  • Ich habe nicht alloc array... ich brauche eine Pause! Danke.
  • Verwenden Sie die Weise, die Apple empfiehlt das erstellen einer Singleton. Wie in meiner Antwort.
  • Das ist, was ich sicherlich tun. Danke!

InformationsquelleAutor guitar_freak | 2013-03-13
Schreibe einen Kommentar