Общий массив между несколькими классами - PullRequest
0 голосов
/ 26 января 2011

У меня есть массив "myArr", который содержит объекты пользовательского класса ... например. объекты типа MyClass

Мне нужно поделиться этим массивом между несколькими классами ..

Не могли бы вы помочь мне с точным кодом, который я должен использовать ..

Я упомянул паттерн Singleton в Apple и другие ссылки, но меня это очень смущает ... Поэтому было бы здорово, если бы вы могли выделить вещи / код, которые мне нужно добавить.

Ответы [ 2 ]

1 голос
/ 26 января 2011

Я рекомендую вам прочитать о делегировании объекта.

@ property (nonatomic, copy) NSArray * myArr;

В других ваших классах реализовать делегатобъект, который будет указывать на этот класс, тогда вы можете использовать:

NSArray * retrievedArray = [self.delegate myArr];

Редактировать: если вы хотите использоватьтолько Singleton, я думаю, что это будет что-то вроде этого:

static MyClass * obj = nil;

В вашем классе с массивом создайте метод класса для возвратаобъект Singleton

+ (MyClass *) sharedInstance {

     if (obj) {

      obj = [[self alloc]init];

     }

return obj;

}

С другой стороныклассы, которые вы можете просто использовать

NSArray * retrievedArray = [[MyClass sharedInstance] myArr];

, чтобы получить обратно массив.

Cheers.

0 голосов
/ 26 января 2011

Я бы держался подальше от синглетонов . Поскольку массив - это некая модель (в смысле Модель-Представление-Контроллер), другие классы должны зависеть от него:

@interface ControllerA : UIViewController {}
@property(retain) NSArray *array;
@end

@interface ControllerB : UIViewController {}
@property(retain) NSArray *array;
@end

Теперь вопрос меняется на «как мне предоставить зависимость». Вы можете сделать это с помощью Interface Builder или предоставить массив при построении зависимых объектов. Например, у меня иногда есть метод с именем setupObjectGraph в моем делегате приложения, который создает экземпляры классов и соединяет их вместе:

- (void) setupObjectGraph
{
    mainController = [[MainController alloc] init…];
    [mainController setThis…];
    [mainController setThat…];

    OtherController *bar = [[OtherController alloc] init…];
    [bar setThis…];
    [bar setThat…];
    [mainController setBar:bar];
    [bar release];

    …
}

- (void) applicationDidFinishLaunchingOrWhatever
{
    [self setupObjectGraph];
    [window addSubview:[mainController view]];
    [window makeKeyAndVisible];
}

Это не идеально (оно не очень хорошо масштабируется), но оно работает для многих приложений и намного лучше, чем синглтоны. Это звучит как мелочь, но сильно влияет на ваш общий дизайн, поэтому имеет смысл подумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...