Статическая переменная, метод или синглтон?

Мне было интересно, как получить доступ к "статическим" переменным из модели из разных ViewControllers. Должен ли я пойти на:

  • статические переменные (если да, то как?)
  • статический метод
  • синглтон + метод
  • синглтон + переменная (пользовательские геттеры)

#import "CategoryModel.h"

@implementation CategoryModel

-(NSArray*) allSelected {
    return [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:SELECTEDCATEGORIES_DEFAULTSKEY]];
}

-(NSString*) allSelectedAsUrlParams {
    NSMutableString *categoryList = [NSMutableString string];

    for (NSArray *category in self.allSelected) {
        [categoryList appendString:[category valueForKey:@"value"]];
        if(![[self.allSelected lastObject] isEqual:category]) {
            [categoryList appendString:@","];
        }
    }

    return categoryList;

}

@end

*Редактировать (работает) *

// header
#import <Foundation/Foundation.h>

@interface CategoryModel : NSObject

+ (NSString*)allSelectedAsUrlParams;

@end


// implementation
#import "CategoryModel.h"

@implementation CategoryModel


+ (NSString*)allSelectedAsUrlParams {
    return @"somethingGreat";
}

@end

// How to use
CategoryModel.allSelectedAsUrlParams

1 ответ

Это действительно будет вопрос архитектурных предпочтений, но если более чем одному классу понадобятся статические переменные, это один из подходов:

Constants.h

extern BOOL const TEST_MODE;
extern NSString * const SOME_STRING;

Constants.m

BOOL const TEST_MODE = YES;
NSString * const SOME_STRING = @"SomeString";

В качестве альтернативы, вы можете просто добавить extern NSString * const SOME_STRING; к заголовку класса, к которому он относится (и соответствующий NSString * const SOME_STRING = @"SomeString"; в.m), а затем вызвать эту переменную напрямую, импортировав заголовок класса с нужной вам константой и используя SOME_STRING чтобы получить на это.

Другие вопросы по тегам