вівторок, 6 жовтня 2015 р.

Трошки про патерни

Забігаючи на перед, ось стаття на основі якої я хочу написати цей пост.

MVC - (Model - View- Controller)  -
Модель - містить в собі набір даних, які на даний момент показуються або задіяні на View
View - відповідає за візуальний показ даних, які беруться з моделі, а також за можливість маніпулювання юзером з цими даними.
Контроллер - координує зв'язок між моделлю та view, маніпулює з моделями обробляючи сигнали, які приходять з view.

Singleton - (Одинак)
В назві своїй, несе основну відповідь, в самому додатку буде створена лише одна копія цього класу. Яскравими прикладами є
[NSUserDefaults standardUserDefaults][UIApplication sharedApplication][UIScreen mainScreen][NSFileManager defaultManager]
Приклад

- (instancetype) sharedInstance {

static MyClass * _sharedInstance = nil;
static dispatch_once_t onceDispatchCall;

dispatch_once(& onceDispatchCall, ^{
_sharedInstance = [[MyClass alloc]init];
});

return _sharedInstance;
}

Проблемними місцями є тестування таких класів, в плані підстановки Моків замість реальних об'єктів, а також те що напряму не видно,  що при додаванні його в хедери, якщо не знаєш, що це сінглетон, то важко побачити пряму залежність від нього.


Фасад 
Патерн який служить для того,  щоб заховати від користувача більшість методів і залишити лише ті, які дійсно йому треба, при цьому при зміні внутрішньої архітектури і логіки при необхідності, користувач не помітить різниці і йому не треба буде переписувати свою логіку і оновлювати свої методи.


Декоратор - альтернатива наслідуванню, коли вам треба розширити клас до якого застосовується декоратор

  1. Категорії
  2. Делегати



середа, 10 вересня 2014 р.

Розміри нових айфонів 6ть. iPhone's UIScreen sizes

iPhone 6 Plus   {414, 736}  (1080 x 1920)
iPhone 6           {375, 667}   (750   x 1334)
iPhone 5/5s      {320, 568}   (640  x 1136)
iPhone 4/4s      {320, 480}    (640  x 960)

Деталі
http://www.paintcodeapp.com/news/iphone-6-screens-demystified

пʼятниця, 18 січня 2013 р.

@Objective-C (senior level) @"Retain cycle and weak references"

Нещодавно я зіштовхнувся з цим безпощадним явищем в одному з моїх проектів. Я давно знав, що ARC  це не панацея, але в моєму випадку це виявилися ліки з вкрапленнями яду. Звісно яд я туди сам підливав шляхом не досконалого стилю програмування і не знанням певних речей. Справа в тому, що як виявилося в моєму випадку, не повне розуміння ARC + не знання підводних каменів GCD, можуть "кинути" так, що поїздка на американських гірках виявляється простою дитячою забавою.

неділя, 16 грудня 2012 р.

@Objective-C (junior level) @"Additional definitions"

Привіт! Давно нічого не писав, але згадати про блог заставила одна стаття з хабру і даби інформація ніде не загубилась вирішив її продублювати. Оригінал знаходиться тут.
Так от, далі наводиться код який ви можете додати в *.pch файл і використовувати в своїх проектах:
#define ApplicationDelegate ((MyAppDelegate *)[[UIApplication sharedApplication] delegate]) #define UserDefaults [NSUserDefaults standardUserDefaults] #define SharedApplication [UIApplication sharedApplication] #define Bundle [NSBundle
mainBundle] #define MainScreen [UIScreen mainScreen] #define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES #define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO #define NetworkActivityIndicatorVisible(x) [UIApplication sharedApplication].networkActivityIndicatorVisible = x #define NavBar self.navigationController.navigationBar

середа, 23 травня 2012 р.

@Objective-C (middle level) @"Core Data and UITextField"

Привіт усім, сьогодні хочу поділитись своїми доробками в напрямку згаданому в заголовку.
Наперед маю сказати, що для мене Core Data довго залишалася технологія, яка виносить мозок. Вона виїдала його ніби американські підлітки (жіночої статі), які гризуть здоровенними ложками морозиво в моменти коли їм страшно чи їх кинув їхній бойфренд. От і я відчував присутність такої ложки в своїй голові, в ті моменти коли сідав за ознайомлення з Core Data. І все ніби зрозуміло, дивишся уроки читаєш блоги, все ясно. Та відчуваєш всерівно себе, як той собака з бородатої історії, що все розумів мав розумні очі тільки сказати нічого не може, в моєму випадку написати код. Проте з'явився стимул так би мовивти каталізатор, поштовх, можна це називати, як завгодно адже завдання на роботі для кожного сприймається по своєму. Після цього прийшлось робити бліцкриг на дану технологію, результат якої ви зараз читаєте.
Питання вирішилось доволі швидко, адже з таким каталізатором все робиться швидше. Що б конкретно хотілось сказати по цій технології:
* CORE DATA  ЦЕ НАДБУДОВА НАД SQLITE - і не дивуйтесь чого я так виділив просто не розуміння цього мене, як виявилося в кінці дуже-дуже затормозило і ввело в оману.
* NSPredicate - почитайте це корисна річ.
* І в загальному, часом треба просто знайти правильний урок.
На перед забігаючи маю сказати, що код містить відверті частини копіпасту, який я виділю.
По скріншоту доречі можна зрозуміти, що я застосував storyboard з iOS 5.

Отже, розпочнемо:

понеділок, 14 травня 2012 р.

Objective-C(junior level) @"Delegate and custom Button"

Привіт відвідувачам мого блогу. Давно не бачились, (якщо ми взагалі хоч раз в житті будь-де з Вами пересікались). В мене, вже закінчився зошит в якому я занотовува цікавинки з життя Objective-C, тому я вирішив по-перше завести новий зошит, а по-друге надати інформацію отриману за десь пів-року моєї праці перенісши в цифровий вигляд сторінки з зошиту. Хочу наперд сказати нічого наднового Ви не побачите тут, все це можна вигребти з бездни інтернету потративши тьму часу, правда мені здаєтся, що краще просто зайти до мене швиденько в блог і знайти необхідну інфу.
Отож, хотів би  розпочати з того, що колупало мій мозок перший час поки я знайомився з мовою Objective-С, а саме delegate та штука довго не проверталась в мене в голові, а конкретно всі етапи її створення та взагалі просто його смисл. Забігаючи наперед маю сказати, що на даному етапі мого розвитку без делегатів в мене не проходить жоден робочий день. Бо як виявилось то штука цікава і корисна.
Для прикладу пропоную реалізувати таку річ:
В нас є контроллер на ньому є якась в'юшка, проста UIView в середину ми додаємо княпавку при натисненні на яку в нас змінюється фон у нашого контроллера НЕ в'юшки! 
Я впевнений на всі 100 %, що гуру Objective-C вже закрили даний блог і додали собі в чорний список, бо як можна наводити такі прості приклади, краще б я там навів прикладом парс  JSON(а), який качає чаcтинами, з гіговий файл і зберігаючи в NSDocumentDirectory і маркує спеціальним чином щоб його не реджектнули і він не синхронизувався з iCloud. Як варіант можна ще почути:@"Нашо тут делегат два суперв'ю" і ти в контроллері. Ніхто не сперечається, що і так можна просто ми тут люди маленькі займаємось простими речами.
Доречі маю сказати, що я як і багато з піонерів, які пробували писать для Objective-С не під маком (в даному контексті немає жодного натяку на наркотичні речовини), був змушений змиритись, що  не треба експерементувати, та мучати мозок собі і людям. 

субота, 3 березня 2012 р.

Objective-C (middle level)@"Protocol friend or foe(свій чужий)"

Нещодавно прийшлось зробити таку річ, як перевірка класу на наявність в ньому реалізації конкретно заданого протоколу, забігаючи на перед маю казати, що це було справжнеє випробування. Можу сказати, що давненько я так не гуглив, як той раз поки не знайшов щось схоже на  http://jomnius.blogspot.com/2011/01/how-to-check-if-ios-supports-class.html
Для уточнення:
if ([class conformsToProtocol:@protocol(SomeProtocol)])
перевіряємо чи клас реалізує певний протокол
if ([item respondsToSelector:@selector(newMethod:)])
перевіряємо чи клас реалізує необхідний для нас метод. Я бачив випадки коли використовують дані перевірки в парі.