Трохи про Swift runtime або куди зник NSObject

Привіт друзі! Я з тих, кому нудно просто смикати за ниточки, що стирчать з чорної коробки, хочеться побачити все своїми очима, як воно працює під капотом. Ми поговоримо з вами про рантайм, так-так рантайм. Для наших дослідів розглянемо старого доброго дідуся Objective C і революційного, але поки ще перебуває в стадії розвитку, Swift. Нам з вами потрібно пірнути практично на саме дно абстракцій, які дбайливо придумали програмісти Apple. Давайте трохи розберемося, навіщо взагалі знадобилося розробляти нову мову. Я чув багато негативних відгуків в самому початку, особливо від вже досвідчених розробників Objective C. Якщо подивитися уважніше на новий мову Swift, він на мій погляд значніше дорослішим і серйознішим. По-перше, він написав на мові С++ на відміну від Сі, який лежить в основі Objective C. Я тут висловлюю лише свої суто особисті упередження, з якими можна погодитися, можна і посперечатися.

Читати далі →

Type assertation without allocations

Всім привіт. У додатку до моєї попередній статті був цікавий діалог з
kirill_danshin.
Врешті-решт ми це зробили. Зустрічайте — efaceconv, програмка для go generate, з допомогою якої можна наводити типи interface{} без аллокаций і в ~4 рази швидше.
https://github.com/t0pep0/efaceconv

Читати далі →

Трохи про порожніх інтерфейсах. Швидкий погляд зсередини

Всім привіт!

Warning: стаття не принесе нічого нового для профі, але буде корисна новачкам.

Якщо ви це читаєте, значить я вже мертвий ви, як мінімум, цікавитеся мовою Go. Отже, знаєте, про таку річ, як interface{}.
А що буде, якщо я скажу, що будь-інтерфейс це просто структура? А також, що досить легко реалізувати свої самому інтерфейси? Прошу під кат.

Читати далі →

Простий, природний питання: які бувають бібліотеки UWP?



Повторне використання коду і сумісність під різні платформи в наш час досить актуальне питання. Крім того MSFT останнім часом намагається догодити розробникам різних платформ і мов програмування. Саме тому, ймовірно, можливості універсальної платформи Windows дозволяють використовувати не один тип бібліотек. Під катом про те, які бібліотеки, як і навіщо можна використовувати в додатках UWP.

Читати далі →

Swift покращуємо performSegueWithIdentifier або зручний роутер зі сторибордами

Рідкісний розробник під iOS і OS X не використовував сторіборди і ще менше програмістів не передавали дані між екранами.
Всі ми знаємо метод performSegueWithIdentifier і труднощі роботи з ним.

Почавши проект на Swift в один момент мені стало прикро: «Чому ми повинні строго-типизированном мовою використовувати обгортку для передачі даних?»
Через пару хвилин сформувалося бачення вирішення і незабаром реалізація.

Довго думав, чи варто писати про це, оскільки матеріал вкрай невеликий, але ці 50 рядків можуть дуже сильно допомогти

menuController?.performSegueWithIdentifier(changeItemIdentifier, sender: nil) { segue in
let controller = segue.destinationViewController as! ChangeMenuItemController
controller.viewModel.sourceMenuItem = item
}


Таким чином, легко використовувати сторіборди і роутери разом. Усунути розростання prepareForSegue і збільшити контекст читання коду. В той же час це не змушує відмовлятися від prepareForSegue при зручних ситуаціях.

Розберемося як це працює? Не претендую на унікальність, але мені здається підхід цікавим.

Читати далі →

Objective-C що таке насправді метод і self? + runtime

Як self і _cmd виявляються в методі? Як працює dispatch table і категорії? Що таке мета-клас? Скільки насправді методів у ваших класів в ARC і в MRC? Як працює swizzling?
Цікаво? Ласкаво просимо під кат!

УВАГА!
Ця стаття не розрахована на початківців розробників… Приношу свої вибачення за те, що не розглядаю багато моментів, які повинен знати Objective-C розробник.



Читати далі →

Age of JIT compiling. Part II. CLR is watching you

Продовжуючи тему JIT-компіляції .NET'a, сьогодні ми розглянемо диспетчеризацію методів у інтерфейсів, узагальнення (як класів, так і окремих методів разом з реальними сигнатурами); проводити налагодження релізних збірок з оптимизациями; розберемося з істинним призначенням типу System.__Canon (це не те, що Ви подумали).

Читати далі →

Приватний методи для налагодження

    Напевно вже всі знають, що у UIView є корисний метод recursiveDescription.
Виклик якого, поверне рядок з описом всієї ієрархії в'ю.
 
 
(lldb) po [[self view] recursiveDescription]
<UIView: 0x6a107c0; frame = (0 20; 320 460); autoresize = W+H; layer = […]
   | <UIRoundedRectButton: 0x6a103e0; frame = (124 196; 72 37); opaque = NO; […]
   |    | <UIButtonLabel: 0x6a117b0; frame = (19 8; 34 21); text = 'Test'; […]
   .....

Ще багато хто знає, що за допомогою Рантайм, можна отримати список змінних / методів / властивостей / протоколів /… класу. І звичайно для цих цілей пишуть допоміжний код. Але виявляється, все вже давно написано співробітниками Apple. У UIKit.framework реалізована категорія з ім'ям IvarDescription.
 
 
@interface NSObject (IvarDescription)
- (id)_shortMethodDescription;
- (id)_methodDescription;
- (id)__methodDescriptionForClass:(Class)arg1;
- (id)_ivarDescription;
- (id)__ivarDescriptionForClass:(Class)arg1;
@end

Назви метдов говорять за себе. Але давайте подивимося, що ж вони повертають.
 
Читати далі →