Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СЕССИЯ ОТВЕТЫ / iOS сессия ответы.docx
Скачиваний:
21
Добавлен:
25.12.2020
Размер:
14.45 Mб
Скачать

54.Деинициализаторы

Деинициализаторы являются отличительной особенностью классов. Деинициализатор автоматически вызывается во время уничтожения экземпляра класса. Вы не можете вызвать деинициализатор самостоятельно. Один класс может иметь максимум один деинициализатор. С помощью деинициализатора вы можете, например, освободить используемые экземпляром ресурсы, вывести на консоль журнал или выполнить любые другие действия.

СИНТАКСИС

deinit {

// тело деинициализатора }

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

class SuperClass {

init?(isNil: Bool){

if isNil == true {

return nil }

else{

print("Экземпляр создан") }

}

deinit {

print("Деинициализатор суперкласса") }

}

class SubClass:SuperClass{

deinit {

print("Деинициализатор подкласса") }

}

var obj = SubClass(isNil: false)

obj = nil

Консоль

Экземпляр создан

Деинициализатор подкласса

Деинициализатор суперкласса

При создании экземпляра класса SubClass на консоль выводится соответствующее сообщение, так как данный функционал находится в наследуемом от суперкласса проваливающемся инициализаторе. В конце программы мы удаляем созданный экземпляр, передав ему в качестве значения nil. При этом вывод на консоль показывает, что первым выполняется деинициализатор подкласса, потом — суперкласса.

  1. Архитектура MVC. На примере приложения

MVC расшифровывается как Model-View-Controller (Модель-ОтображениеКонтроллер) и является основой построения программных продуктов в среде Xcode Лучше всего понять концепцию MVC можно на реальном примере — ресторане с фастфудом. В нём посетители (пользователи) подходят к кассиру (одновременно вид и контроллер), видят меню и заказывают какое-нибудь блюдо.Кассир проверяет, всё ли в порядке с заказом, и после оплаты передаёт нужные данные повару (модель). Повар готовит заказанное блюдо, хотя понятия не имеет о том, как выглядит посетитель, оплатил ли он заказ и так далее. Когда модель закончит свою работу, она отправит результат в вид — обратно кассиру, который, в свою очередь, отдаст готовое блюдо посетителю. Если же говорить о приложениях, то компоненты будут следующие:

‰‰ Модель — классы, которые обеспечивают хранение данных ваших приложений .

‰‰ Отображение (Представление) — позволяют создать различные графические элементы, которые видит пользователь при работе с приложением .

‰‰ Контроллер — обеспечивает совместную работу «отображения» и «модели» . Данный блок содержит логику работы приложения .

Пример

<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">

<StackPanel Orientation="Horizontal">

<TextBox Name="Num1TextBox" Margin="5" Width="50"/>

<TextBlock Text="+" Margin="5" FontWeight="Bold"/>

<TextBox Name="Num2TextBox" Margin="5" Width="50"/>

</StackPanel>

<TextBlock Text="0" Name="ResultTextBlock" TextAlignment="Center" Margin="5"/>

<Button Content="Посчитать" Name="CalculateButton" Click="CalculateButton_Click" Margin="5"/>

</StackPanel>

Это и есть View — его видит пользователь. Тут есть кнопка, при нажатии на которую вызывается Controller:

private void CalculateButton_Click(object sender, RoutedEventArgs e) //Метод, который вызывается при нажатии на кнопку "Посчитать"

{

//Валидация полученных данных

string text1 = Num1TextBox.Text.Trim();

string text2 = Num2TextBox.Text.Trim();

int num1 = 0;

int num2 = 0;

if (!string.IsNullOrEmpty(text1) && !string.IsNullOrEmpty(text2))

{

try

{

num1 = Convert.ToInt32(text1);

num2 = Convert.ToInt32(text2);

}

catch (Exception exc) { }

Calculate(num1, num2); //Передача данных модели

}

}

Контроллер получает пользовательский ввод и обрабатывает данные. Он также может проверять права пользователя. Если валидация проходит успешно, данные передаются в Model:

public void Calculate(int num1, int num2)

{

result = num1 + num2; //Проведение операций с полученными данными

UpdateView(); //Вызов обновления представления

}

Модель проводит с этими данными необходимые операции, а затем вызывает метод обновления вида:

public void UpdateView()

{

ResultTextBlock.Text = result.ToString(); //Изменение вида

}

Вот результат работы такой программы:

  1. Использование фреймов, основы Auto Layout

Auto Layout занимается динамическим вычислением позиции и размера всех view в view иерархии, на основе constraints — правил заданных для того или иного view. Самый большой и очевидный плюс для разработчика в использовании Auto Layout в том, что исчезает необходимость в подгонке размеров приложения под определенные устройства — Auto Layout делает это за вас, динамически изменяя интерфейс в зависимости от внешних или внутренних изменений. Примером внешних изменений может быть: Изменение размера окна в macOS, изменение ориентации экрана, различные размеры экранов. Пример внутренних изменений: Изменение контента в окне, изменения в зависимости от языка и т.д. Создать свой интерфейс можно 3-мя способами: программно, на основе маски, которая автоматически подстраивается под изменения или использовать Auto Layout. Отличие Auto Layout от других способов в том, что вам больше не нужно писать код, который изменяет интерфейс в зависимости от размера окна и других элементов, вместо этого Auto Layout самостоятельно вычисляет расположение элемента интерфейса в приложении и изменяет его относительно окружения.

Соседние файлы в папке СЕССИЯ ОТВЕТЫ