* Мне определенно нужен перерыв ... причина была проста - массив не был выделен ... Спасибо за помощь. Из-за этой смущающей ошибки я пометил свой пост, чтобы удалить его. Я не считаю это полезным для пользователей;) *Objective C - пример реализации Singleton
Я только что попытался создать одноэлементный класс в iOS, но я, вероятно, ошибаюсь. Код (не ARC не является обязательным требованием):
#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
При вызове GetInstance как здесь:
PeopleDatabase *database = [PeopleDatabase getInstance];
NSLog(@"Adress 2: %p", database);
Адрес 2 значение такое же значение, как и в GetInstance.
Что именно вы подразумеваете под «значением адреса 2, равным тому же значению, что и в getInstance». ? – Petar
он должен быть того же адреса .. с его того же объекта? объект, который вы вернули в getInstance, назначается одной базе данных. – Fonix
См. [Этот ответ] (http://stackoverflow.com/a/145395/730701). – Adam