Set_3 Flashcards

1
Q

What is Cocoa?

A

Cocoa and Cocoa Touch are the application development environments for OS X and iOS, respectively. Both Cocoa and Cocoa Touch include the Objective-C runtime and two core frameworks:
Cocoa, which includes the Foundation and AppKit frameworks, is used for developing applications that run on OS X.
Cocoa Touch, which includes Foundation and UIKit frameworks, is used for developing applications that run on iOS.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What is inout parameter?

A
All parameters passed into a Swift function are constants, so you can’t change them. If you want, you can pass in one or more parameters as inout, which means they can be changed inside your function, and those changes reflect in the original value outside the function.
func doubleInPlace(number: inout Int) {
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Difference between weak self vs unowned self?

A

The difference between unowned and weak is that weak is declared as an Optional while unowned is not. By declaring it weak you get to handle the case that it might be nil inside the closure at some point. If you try to access an unowned variable that happens to be nil, it will crash the whole program. So only use unowned when you are positive that variable will always be around while the closure is around.
The only time where you really want to use [unowned self] or [weak self] is when you would create a strong reference cycle. A strong reference cycle is when there is a loop of ownership where objects end up owning each other (maybe through a third party) and therefore they will never be deallocated because they are both ensuring that each other stick around.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What is tuple?

A
Tuples in Swift occupy the space between dictionaries and structures: they hold very specific types of data (like a struct) but can be created on the fly (like dictionaries). They are commonly used to return multiple values from a function call.
You can create a basic tuple like this:
let person = (name: "Paul", age: 35)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

When to use delegate or closures?

A

We can say that delegate callbacks are more process oriented and closure are more results oriented. If you need to be informed along the way of a multi-step process, you’ll probably want to use delegation. If you just want the information you are requesting (or details about a failure to get the information), you should use a closure.

a. If an object has more than one distinct event, use delegation.
b. If an object is a singleton, we can’t use delegation.
c. If the object is calling back for additional information, we’ll probably use delegation.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Can we declare variables in protocol and does Protocol support extension?

A

Yes, The protocol doesn’t specify whether the property should be a stored property or a computed property — it only specifies the required property name and type.

protocol SomeProtocol {
var one: Int { get set }
var two: Int { get }
}
Yes, You can extend an existing type to adopt and conform to a new protocol, even if you don’t have access to the source code for the existing type. Extensions can add new properties, methods, and subscripts to an existing type, and are therefore able to add any requirements that a protocol may demand.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

What is Optional Chaining?

A
Optional chaining is a process for querying and calling properties, methods, and subscripts on an optional that might currently be nil. If the optional contains a value, the property, method, or subscript call succeeds; if the optional is nil, the property, method, or subscript call returns nil. Multiple queries can be chained together, and the entire chain fails gracefully if any link in the chain is nil.
if let johnsStreet = john.residence?.address?.street {
print(“John’s street name is \(johnsStreet).”)
} else {
print(“Unable to retrieve the address.”)
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Difference between delegates and closures? Which one to prefer?

A

Ans: First of all, there is nothing that is impossible without using closures. You can always replace a closure by an object implementing a specific interface. It’s only a matter of brevity and reduced coupling.
Comparison
1. Length and Relationship
The closure way is shorter. When you work with the delegate way, you have to implement the required functions to conform to the protocol.When you use the closure way, even if the object calls the method, Class can simply ignore. Therefore, the closure way is often called, “decoupled”. The relationship is rather weak and fragile.
Some would argue that you can make the delegate function as “optional”. But, if you see your code , it still looks complicated.
2. Memory Management
When it comes to memory management, you have to define the protocol as class and define the delegate property as weak to prevent retain cycle.
When you work with the closure way, you have to define self either withunowned or weak. If you are not using self, you don’t have to worry about retain cycle.
3. Backward Communication
If you want to communicate back to the object, using the delegate way, you have to use the datasource pattern. If you want to communicate back to the object using the closure way, you also have to return something in closure.
Well, there isn’t much difference.
4. Dryness
If you want to implement many other delegate protocols, you probably have to include all protocol and implement methods, which looks hideous and you will have a hard time tracking and debugging. Good luck. Yes, we’ve tried to manage and distribute through extension but it will still be tough my friend.
But when it comes to the closure way, it wins.
Even other platforms are moving from delegate to closure way, React and React Native use the closure way.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Опишите циклические ссылки в Swift? Как их можно исправить?

A

Циклические ссылки происходят, когда два экземпляра содержат сильную ссылку друг на друга, что приводит к утечке памяти из-за того, что ни один из этих экземпляров не может быть освобождён. Экземпляр не может быть освобождён, пока есть еще сильные ссылки на него, но один экземпляр держит другой.

Это можно разрешить, заменив на одной из сторон ссылку, указав ключевое слово weak или unowned.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как настроить Live Rendering?

A

Атрибут @IBDesignable позволяет Interface Builder обновлять конкретные элементы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Чем отличаются синхронная и асинхронная задача?

A

Синхронная: ждет, пока задача завершится. Асинхронная: завершает задачу в фоновом режиме и уведомляет вас о завершении.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое b-деревья?

A

Это поисковые деревья, которые предоставляют упорядоченное хранилище ключевых значений с отличными характеристиками производительности. Каждый узел хранит отсортированный массив своих собственных элементов и другой массив для своих дочерних элементов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что такое объект NSError?

A

Существует три части объекта NSError: домен, код ошибки и словарь с пользовательской информацией. Домен — это строка, которая идентифицирует, к какой категории относится эта ошибка.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое Enum?

A

Enum – это тип, который в основном содержит группу связанных значений.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

В чем разница strong, weak, read only и copy?

A

Атрибуты свойства strong, weak, assign определяют, как будет управляться память для этого свойства.

Strong означает, что в сгенерированном сеттере счетчик ссылок на присваиваемый объект будет увеличен и ссылка на него будет поддерживаться в течение жизни объекта.

Weak означает, что мы указываем на объект, но не увеличиваем счетчик ссылок. Он часто используется при создании родительских-дочерних отношений. Родитель имеет сильную ссылку на ребенка, но ребенок имеет только слабую ссылку на родителя.

Read only — мы можем установить свойство изначально, но затем его нельзя будет изменить.

Copy означает, что мы копируем значение объекта при его создании. Также предотвращает изменение его значения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что такое Dynamic Dispatch?

A

Dynamic Dispatch — это процесс выбора реализации полиморфной операции, которая является методом или функцией для вызова во время выполнения. Это происходит, когда мы хотим вызывать наши методы как метод объекта. Swift по умолчанию не выполняет Dynamic Dispatch.

17
Q

Что такое обработчик завершения?

A

Обработчики завершения очень удобны, когда наше приложение вызывает API, и нам нужно что-то сделать, когда эта задача будет выполнена: например, обновить пользовательский интерфейс, чтобы отобразить данные из вызова API. Обработчики завершения можно найти в API Apple, например, dataTaskWithRequest, и они могут быть очень полезными в вашем коде.

Обработчик завершения принимает код с тремя аргументами: (NSData?, NSURLResponse?, NSError?), который ничего не возвращает: void. Это означает завершение.

Обработчики завершения должны быть помечены @escaping, так как они выполняются после выполнения функции.

18
Q

В чем разница между рамкой и границами (frame и bound)?

A

Границы в UIView — это прямоугольник, имеющий местоположение (x, y) и размер (ширина, высота) относительно собственной системы координат (0,0).

Рамка в UIView это прямоугольник, имеющий местоположение (x, y) и размер (высота, ширина) относительно элемента, в котором он содержится.

19
Q

Что такое функции?

A

Функции позволяют нам группировать серии утверждений, чтобы выпонить какое-либо задание. Как только функция будет создана, её можно использовать в коде снова и снова. Если вы находите повторяющиеся утверждения в коде, функция может стать средством от этого повторения.

Совет: хорошие функции принимают входные данные и возвращают выходные. Плохие функции устанавливают общие переменные и полагаются в работе на другие функции.

20
Q

Объясните MVVM?

A

Независимое отображение вашего представления и его состояния в UIKit. Модель представления вызывает изменения в модели и обновляет себя, и так как мы имеем связь между моделью и моделью представления, первая обновляется соответствующим образом.

Ваша модель представления фактически возьмет вашу модель, и сможет отформатировать информацию, которая будет отображаться в вашем представлении.

Существует более известная структура под названием RxSwift. Она содержит RxCocoa, которая является реактивными расширениями для Cocoa и CocoaTouch.

21
Q

Какие существуют ограничения SQLite?

A

Нам нужно определять отношения между таблицами.
Мы должны вручную писать запросы для извлечения данных.
Нам нужно запросить результаты, а затем сопоставить их с моделями.
Запросы очень быстрые.

22
Q

Какие преимущества у Realm?

A

База данных с открытым исходным кодом.
Просто внедряется.
Хранение объектов без копирования.
Это быстро.

23
Q

Объясните lazy в Swift?

A

Начальное значение ленивых свойств вычисляется только тогда, когда свойство вызывается в первый раз.

24
Q

Что такое Grand Central Dispatch (GCD)?

A

GCD — это библиотека, которая предоставляет низкоуровневый и объектный API для одновременного запуска задач при управлении потоками за кулисами. Терминология:

Очереди отправки. Очередь отправки отвечает за выполнение задачи в порядке FIFO.
Серийная очередь отправки. Последовательная очередь отправки запускает задачи по одной.
Параллельная очередь отправки. В параллельной очереди отправки выполняется столько задач, сколько возможно без ожидания завершения начатых задач.
Основная очередь отправки. Глобально доступная последовательная очередь, которая выполняет задачи в основном потоке приложения.

25
Q

Какие существуют преимущества Guard?

A

Есть два больших преимущества guard. Во-первых, это избегание большого числа утверждений if let, встроенных друг в друга. Во-вторых, это быстрый выход из функции, используя break или return.

26
Q

ЧТО ТАКОЕ SOLID ПРИНЦИПЫ?

A

S — Single responsibility principle — Принцип единственной обязанности:
На каждый класс должна быть возложена одна-единственная обязанность.

O — Open/closed principle — Принцип открытости/закрытости:
Программные сущности должны быть открыты для расширения, но закрыты для изменения.

L — Liskov substitution principle — Принцип подстановки Барбары Лисков:
Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.

I — Interface segregation principle — Принцип разделения интерфейса
Много специализированных интерфейсов лучше, чем один универсальный.

D — Dependency inversion principle — Принцип инверсии зависимостей:
Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

27
Q

ЦИКЛ ЖИЗНИ IOS-ПРИЛОЖЕНИЯ

A

Состояние Описание
Not running Приложение не запущено или было запущено, но его выполнение было прервано системой
Inactive Приложение запущено на переднем плане, но в данный момент не принимает события. (Хотя может выполнять в этот момент какой-то другой код). Приложение обычно остается в этом состоянии очень ненадолго, поскольку оно сразу переходит в другое состояние.
Active Приложение работает на переднем плане и принимает события. Это обычный режим для приложений на переднем плане.
Background Приложение находится в фоновом режиме и выполняет код. Большинство приложений вводят это состояние ненадолго, во время перехода к состоянию suspended. Однако приложение, запрашивающее дополнительное время выполнения, может оставаться в этом состоянии еще некоторое время. Кроме того, приложение, запускаемое непосредственно в фоновом режиме, сразу входит в состояние Background, а не в состояние Inactive.
Suspended Приложение находится в фоновом режиме, но не выполняет код. Система автоматически переводит приложения в это состояние и не уведомляет их об этом. Приложение приостановлено, оно остается в памяти, однако не выполняет никакого кода. При возникновении состояния с нехваткой памятью система может удалять приостановленные приложения без уведомления, чтобы освободить место для приложений переднего плана.