Използване на сингълтон за създаване на основен стил помощен клас

Аз съм начинаещ в objectiv-c и имам въпрос за архитектурен или дизайнерски модел. Създавам приложение за ios и като повечето приложения за ios, то използва различни цветове, шрифт, шаблони и т.н. Може би в момента пиша код неправилно, но установявам, че пренаписвам неща като цветови настройки. И в резултат на това промяната на цветовете се превръща в упражнение за намиране на всички цветови настройки в кода, пренаписването им и т.н. Изглежда ми малко неефективно.

Например използвам тъмночервен цвят на няколко места в приложението си. Склонен съм да пиша метода [UIColor colorWithRed...] доста често. Любопитно ми е обаче дали създаването на сингълтън, който връща моите персонализирани цветове (като UIColor), е разумен подход за „модулизиране на моя стилов пакет“. Така че мога да напиша нещо подобно

[label setTextColor:[[MyStyleSingletonClass sharedStyler] myDarkRed]];

По този начин, ако дизайнерите изведнъж искат myDarkRed да бъде малко по-тъмен, аз го променям веднъж и е добре да премина през приложението. Ясно е, че стилът и UX са нещо повече от цвета, но съм любопитен дали този подход има смисъл или се подготвям за проблеми в бъдеще. Или може би тази възможност вече съществува в object-c и аз пропускам смисъла. Благодаря предварително.


person natenash203    schedule 15.03.2013    source източник


Отговори (2)


Мисля, че по-добрият подход към нещо подобно е категория от класови методи на самия UIColor. Често пиша категории цветове за проекти с много персонализирани цветове.

Нещо като това:

// UIColor+AppAdditions.h
@interface UIColor (AppAdditions)

+ (UIColor *)myDarkRed;

@end

// UIColor+AppAdditions.m

#import "UIColor+AppAdditions.h"

@implementation UIColor (AppAdditions)

+ (UIColor *)myDarkRed
{
    return [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0];
}

@end

По този начин нямате нужда от цял ​​Singleton и той е по-преносим, ​​в случай че Singleton прави други неща. И можете да получите чист достъп до вашите цветове по този начин:

[label setTextColor:[UIColor myDarkRed]];

Забележка

Както споменаха Роб и Пол. Най-добре е да ги наименувате по подходящ начин. Взех името, което имахте, но би било най-добре да ги наименувате специално за тяхната употреба и да следвате конвенции като префикс и суфикс.

person Ryan Poolos    schedule 15.03.2013
comment
Все пак много добро мислене :) Страхотно е да има еднаква цветова схема в цялото приложение и наличието на нещо подобно наистина помага. - person Ryan Poolos; 15.03.2013
comment
Аз също често използвам категория. Едно предимство на стиловия обект обаче е, че той може да бъде заменен по време на изпълнение, за да промени стила. Например вместо myDarkRed често е по-добре да имате методи като errorColor и това е нещо, което може да искате да бъде променено. (Но често все още използвам подхода на категорията, тъй като е толкова лесен; просто правя errorColor метод на UIColor.) - person Rob Napier; 15.03.2013
comment
Аз съм фен на подхода на категорията и съм съгласен с @RobNapier за наименуване на цвета за неговата употреба, а не за действителното му изпълнение (където е възможно). Нещо, което трябва да имате предвид обаче е, че често е по-добре да се придържате към последователен стил на именуване - в този случай след UIColor трябва да бъде <description>Color. Друг момент при наименуването е, че трябва да използвате префикс за методи, добавени с категория, за да избегнете сблъсъци в имена на методи, напр. Може да се окажа с pas_lightBackgroundColor. - person Paul.s; 15.03.2013
comment
Добри точки. Добавих бележка към отговора за други, които идват да търсят. - person Ryan Poolos; 15.03.2013
comment
Благодаря за отговора. Това има смисъл. - person natenash203; 18.03.2013

Защо не използвате macro?

in YourHelperClass.h

#define DARK_RED    [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0]

и можете да използвате по този начин (не забравяйте import YourHelperClass.h) :

[label setTextColor:DARK_RED];

Мисля, че е по-добре да използвате macro

person Guo Luchuan    schedule 15.03.2013
comment
Второ използвам макрос за това. По този начин Styles.h може лесно да се използва за цветове, шрифтове и т.н. Категоричният подход означава, че само цветове могат да се съхраняват в UIColor+Style категория - да не говорим, че е по-подробна. - person cleverbit; 31.07.2013