Array є впорядкованою колекцією з довільним доступом
Read – O(1) – читання за індексом
Search – O(N)
Add element – O(1) або O(N) у найгіршому випадку. Якщо array потрібно перемістити в новий простір пам’яті, то O(N). Якщо в array достатньо місця з початку або в кінці – ніж O(1). O(N), якщо додавати всередину array зі зсувом.
Removing element – O(N) слід зсунути після видалення.
Set — це сукупність унікальних даних
Search – O(1)
Add element – O(1)
Removing element – O(1)
У найгірших випадках із зіткненнями це O(N) для всіх операцій
У set(і) є прихований array, де індексується хеш-код, який є результатом хеш-функції значення (value). Цей розрахований індекс зберігає значення.
Якщо нові різні значення мають однаковий хеш-код, вони зберігаються в тому самому елементі, що й нове значення пов’язаного списку
Якщо нові значення однакові та хеш-коди також однакові, ця операція вставки буде проігнорована, оскільки це значення не є унікальним і вже є в наборі
Dictionary — це набір пар ключ-значення
Search – O(1)
Add element – O(1)
Removing element – O(1)
У найгірших випадках із зіткненнями це O(N) для всіх операцій
У dictionary є прихований array, де індексується хеш-код, який є результатом хеш-функції ключа (key). Цей обчислений індекс зберігає ключ і значення.
Якщо нові різні ключ-значення мають той самий хеш-код, вони зберігаються в тому самому елементі, що й нове значення зв’язаного списку
Якщо нові значення однакові та хеш-коди також однакові, ця операція вставки буде проігнорована, оскільки це значення не є унікальним і вже є в Dictionary
У Swift є три типи closures:
Global functions – це функції, які оголошуються у глобальній області видимості програми.
Nested functions – це функції, які оголошуються всередині іншої функції та мають доступ до змінних та константів із зовнішньої функції.
Closure expressions – це анонімні функції, які можуть бути передані як аргументи іншим функціям або збережені у змінних чи константах.
@escaping, non-escaping тa Optional closure:
@escaping – Інформує про те, що closure може бути збережений або як може пережити скоуп що викликає.
non-escaping – Інформує про те, що closure не буде збережений і він не переживе скоуп функції що викликає.
Optional closure – якщо closure опціональний, то маркувати його як @escaping не потрібно, він за змовчуванням буде опціональним.
Func і closures – Reference Type:
Це коли функції та closures записуються у змінні, вони не створюють нові обʼєкти, вони зберігають reference (посилання). Тобто
closure можна зберігати у багатьох місцях, але фактично це буде один і той самий closure, а не його копії.
Retain Cycle – це ситуація коли 2 обʼєкти тримають сильні посилання один на одного і цим самим тримають один одного у памʼяті. Це веде до того, що вони не дають ARC знищити себе з памʼяті (через те, що ARC тримає обʼєкт до поки на нього є хоч одне сильне посилання.Ця ситуація призводить до витоку памʼяті, що своєю чергою може призвести до аварійного закриття додатка.
Array є впорядкованою колекцією з довільним доступом
Read – O(1) – читання за індексом
Search – O(N)
Add element – O(1) або O(N) у найгіршому випадку. Якщо array потрібно перемістити в новий простір пам’яті, то O(N). Якщо в array достатньо місця з початку або в кінці – ніж O(1). O(N), якщо додавати всередину array зі зсувом.
Removing element – O(N) слід зсунути після видалення.
Set — це сукупність унікальних даних
Search – O(1)
Add element – O(1)
Removing element – O(1)
У найгірших випадках із зіткненнями це O(N) для всіх операцій
У set(і) є прихований array, де індексується хеш-код, який є результатом хеш-функції значення (value). Цей розрахований індекс зберігає значення.
Якщо нові різні значення мають однаковий хеш-код, вони зберігаються в тому самому елементі, що й нове значення пов’язаного списку
Якщо нові значення однакові та хеш-коди також однакові, ця операція вставки буде проігнорована, оскільки це значення не є унікальним і вже є в наборі
Dictionary — це набір пар ключ-значення
Search – O(1)
Add element – O(1)
Removing element – O(1)
У найгірших випадках із зіткненнями це O(N) для всіх операцій
У dictionary є прихований array, де індексується хеш-код, який є результатом хеш-функції ключа (key). Цей обчислений індекс зберігає ключ і значення.
Якщо нові різні ключ-значення мають той самий хеш-код, вони зберігаються в тому самому елементі, що й нове значення зв’язаного списку
Якщо нові значення однакові та хеш-коди також однакові, ця операція вставки буде проігнорована, оскільки це значення не є унікальним і вже є в Dictionary
Understanding cocoa and cocoa touch responder chain
iOS Responder Chain: UIResponder, UIEvent, UIControl and uses
Програми отримують і обробляють події за допомогою об’єктів відповідачів (responders). Об’єкт responder – це будь-який екземпляр класу UIResponder, а загальні підкласи включають UIView, UIViewController і UIApplication. Responder(и) отримують необроблені дані про подію та повинні або обробити подію, або переслати її іншому об’єкту responder(а). Коли ваша програма отримує подію, UIKit автоматично направляє цю подію до найбільш відповідного об’єкта responder(а), відомого як First responder.
Необроблені події передаються від responder(a) до responder(a) в активному ланцюжку responder(ів), який є динамічною конфігурацією об’єктів responder(ів) вашої програми. На наступному зображенні зображено responder(и) у програмі, інтерфейс якої містить UILabel, UITextField, UIButton та два фонових режими. Діаграма також показує, як події переміщуються від одного responder(a) до іншого, слідуючи Responder Chain.
Якщо view вирішує не обробляти подію дотику, воно буде надіслано вгору по responder chain, який слідуватиме таким шляхом:
Програма отримуватиме події з таких джерел, як:
Визначення first responder
UIKit призначає об’єкт першим відповідачем на подію на основі типу цієї події. Типи подій включають:
Примітка
Події руху, пов’язані з акселерометрами, гіроскопами та магнітометрами, не слідують за responder chain. Замість цього Core Motion доставляє ці події безпосередньо до визначеного об’єкта. Щоб отримати додаткові відомості, перегляньте Core Motion Framework
Коли відбувається дотик, UIKit створює об’єкт UITouch і пов’язує його з view. Коли місце дотику або інші параметри змінюються, UIKit оновлює той самий об’єкт UITouch новою інформацією. Єдина властивість, яка не змінюється, це view. (Навіть якщо місце дотику переміщується за межі вихідного view, значення властивості view дотику не змінюється). Коли дотик завершується, UIKit звільняє об’єкт UITouch.