Pull to refresh

Comments 30

Спасибо! Хотя тут сплошные синглтоны, но для быстрой разработки маленьких проектов пойдет — я сам так делал.
Снипет для синглтону сразу режет глаз. Уже давно пользуюсь потокобезопасным определением синглтона через GCD:

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}
Но в таком случае разве объект не будет обнуляться с каждым вызовом sharedManager?
Можно изменить Singleton.m следующим образом:

<...>
@implementation Singleton

static Singleton *sharedSingleton;

+ (Singleton *)sharedSingleton {
    if (sharedSingleton == nil) {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            sharedSingleton = [[Singleton alloc] init];
        });
    }
    return sharedSingleton;
}
<...>
Спасибо за пояснение! Почитал про static, все стало понятно :)
Поправил текст статьи, плюсанул в карму :)
И так можно.
Где-то в includes.h

// macros for singletone creation
#define DEFINE_SHARED_INSTANCE_USING_BLOCK(block) \
static dispatch_once_t pred = 0; \
__strong static id _sharedObject = nil; \
dispatch_once(&pred, ^{ \
_sharedObject = block(); \
}); \
return _sharedObject; \



Потом там, где нужно

#pragma mark - get Instance
+(ILStateManager *)sharedManager
{
	DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
		return [[ILStateManager alloc] init];
	});
}

Продолжайте делиться опытом!
Хоть для меня новое было только MKStoreKit (еще не работал с микротранзакциями), но все же, может еще что нибудь новое увижу.
Это все конечно интересно, но Вы лучше расскажите о фрилансе. Где и как Вы находите клиентов? На сколько они адекватные? Какие подводные камни в ремесле фрилансера к контексте iOS/MacOS разработчика и т.п.
Интересный комментарий :)
Работаю на elance.com, клиентура пока что только там. Все абсолютно адекватные, пичкают бонусами и платят хорошие деньги (а может это просто я так работаю). Подводные камни? Думаю, такие же, как и во всех других сферах фриланса :) Порой сложно работать дома. Если хорошо знать свое дело, деньги будут :)
Спасибо за информацию. Видел Ваш профайл на elanсe. А еще такие моменты интересны — железо (мак мини, хакинтош и т.п.), девайсы (iPhone, iPad и т.п.), Apple Developer Program, сколько часов в неделю работаете, уровень английского (я надеюсь не с СНГ работаете), сколько уходит времени на поиск заказчиков?
Macbook Air 2012, iPhone 5, iPad Mini. Лицензия на разработку есть. Работаю примерно 25 часов в неделю, час стоит $20. Уровень английского оцениваю как высокий, учусь в UBC. На поиск заказчиков уходит 1-2 дня.
Бесценно! Спасибо еще раз. Air хватает? Я думал подтармаживать будет…
Подтормаживает иногда, но утилита «Free Memory» спасает.
Мне в последнее время стало казаться, что это как раз из-за нее подтормаживает, поэтому благополучно снес ее. Вроде лучше стало, но не существенно.
Подтормаживает обычно только тогда, когда эта утилита чистит память :)
При работе с iOS симулятором — очень спасает
Поделись, какие фреймворки используешь, кроме cocos2d и box2d если используешь их )

Можешь написать о сроке реализации своих проектов?

Тоже хотел фрилансить, но пока боюсь ) с одной стороны в фрилансе свобода, с другой стороны, работая на дядю есть стабильная зарплата.
Работая на дядю есть и «стабильный пендаль», которого нету когда работаешь дома. Для меня вот это более важно. :)
Какие придется, такие и использую :) А так, разобраться в различных фреймворках типа PSPDFKit или Phonegap не состовляет трудности.
Срок реализации зависит от задачи. Я сам себе дядя с пендалем
Скажите, а вы слышали о такой вещи как Объектно-Ориентированное Программирование?
Любитель религиозных войн?
Нет, не любитель. Просто достали такие советы, люди на таком учатся, потом пишут проекты в этом стиле, а эти проекты приходится поддерживать, и это очень сильно напрягает.
Можете указать на ошибки в моем ООП-фу?
Все ваши магические строки прекрасно прячутся в *.m файл класса в котором инкапсулируется вся логика (чтение, запись, etc.)
Кроме того, не понимаю зачем использовать словари для хранения настроек, если можно создать полноценный класс, с пачкой методов, а внутри спрятать логику, опять таки. Может быть в будущем вы решитесь использовать NSUserDefaults, вместо велосипеда с файлами.
Singleton — это скорее антипаттерн, чем паттерн приносящий пользу. Какой смысл создавать объекты которые используются пару раз, а висят в памяти постоянно? Если вам нужно из сотни мест достучаться до одного и того же объекта, то возможно у вас косяк в архитектуре.
Ну и дефайны. Зачем? Чем вас не устраивают константы?
Учту, спасибо.

1. NSUserDefaults использую обычно, но здесь была просто прихоть клиента — использовать plist файлы. Плюс любую настройку клиент мог сам изменить в папке документов приложения.
2. Ох уж этот постоянный холливар насчет синглтонов :) иногда это хорошее решение для архитектуры, иногда нет.
3. Дефайны, константы, компилятору же все равно, разве нет? Поправьте, если я не прав. А клиенту проще видеть привычные #define в своем проекте.
4. Магические строки использованы исключительно для упрощения примеров. При желании, программист сам от них избавится.
1. Можно использовать [NSUserDefaults registerDefaults:[NSDictionary dictionaryWithContentsOfURL:configurationSettingsFileURL]]
3. define можно передефайнить или сделать undef, а константу — нет
1. Спасибо, не знал.
3. В том то и дело, что дефайны можно передефайнить. Скажем, захочет клиент где-то передефайнить только в одном месте — берет и передефайнивает (гипотетически). Бывает по-разному, когда-то нужно использовать дефайны, а когда-то константы
Хорошо, а если более предметно? Что именно в коде не так?
Как фрилансер, думаю сюда надо добавить ещё CocoaPods, очень удобная вещь во многих смыслах и, в частности, в вопросе переиспользумого кода.
С CocoaPods еще не работал, поэтому не могу добавить ее в свои статьи :( Но вы можете написать свою статью!
Sign up to leave a comment.

Articles