Лучший способ хранить переменные класса? - PullRequest
0 голосов
/ 03 сентября 2011

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

По сути, это мой заголовочный файл.

#import <Foundation/Foundation.h>
#import "URWInventoryView.h"

@interface RWInventory : NSObject {
    URWInventoryView *inventoryWindow;

    BOOL slotIsOccupied[5][5];

    int numberOfSlots;
    int numberOfSlotsFilled;
    int numberOfColumns;
    int numberOfRows;
}

//
////
//// Initializers
////
//

- (id) initWithSlots:(int)slots;
- (id) initWithColumns:(int)columns andRows:(int)rows;
- (id) initWithInventoryData:(RWInventory*)inventory;

//
////
//// Setters
////
//

- (void) setSlots:(int)slots;
- (void) setColumns:(int)columns;
- (void) setRows:(int)rows;

- (void) setSlotIsOccupiedColumn:(int)column andRow:(int) row;
- (void) moveItemAtColumn:(int)column andRow:(int)row toColumn:(int)newColumn andRow:(int)newRow;

//
////
//// Getters
////
//

- (int) slots;
- (int) columns;
- (int) rows;

- (BOOL) slotIsOccupiedColumn:(int)column andRow:(int)row;

@end

Это использует первый метод, о котором я говорил ранее.Второй метод предполагает использование одного NSDictionary между объявлениями #import и @interface, и они просто сохраняют данные каждого объекта в ключе.Использованный выше метод звучит для меня гораздо проще и эффективнее.

Пожалуйста, имейте в виду, что я буду использовать где-то от пяти до двадцати объектов этого типа.Последнее замечание: URWInventoryView - это еще один из моих пользовательских классов, основанный на UIView.

1 Ответ

1 голос
/ 03 сентября 2011

Не совсем понятно, но я попробую.Прости меня, если я не в правильном поле здесь.Из того, что я смог разобрать, вопрос в основном сводится к двум вариантам:

  1. Глобальный словарь : в глобальном словаре хранятся все инвентаризации, заданные для каждого экземплярапредставление инвентаризации (5 - 20 экземпляров) или ...
  2. Данные, относящиеся к экземпляру просмотра : для каждого экземпляра представления инвентаризации есть объект данных инвентаризации.

Если нет причины, по которой вам нужен глобальный доступ, я бы рекомендовал использовать данные экземпляра для каждого представления.Я всегда начинал с того, что данные были локализованы для данных, которые в них нуждаются, а затем возвращался к созданию глобальных данных, если это необходимо.Если данные должны были быть разделены между представлениями, я бы создал модель и рассмотрел одноэлементный шаблон для получения доступа к модели (InventoryModel * inv = [InventoryModel sharedInstance]).Ищите одноэлементную цель-c.

Но еще раз, если в этом нет необходимости, я бы локализовал данные для представления, которое оперирует этими данными.Глобальные и общие данные всегда могут усложнить время жизни данных и, возможно, синхронизацию.

...