“Указательная” природа ссылок на экземпляры в Objective-C имеет определенные последствия для системы управления памятью.

Правила области видимости и, в частности, времени жизни переменных в чистом С обычно довольно просты: если вы создаете переменную путем ее объявления в некоторой области видимости, то когда эта область перестает существовать, перестает существовать и переменная. Такого рода переменные называются автоматическими (K&R 1.10). Например:

void myFunctionO {

int i; // Выделено место для хранения int i = 7; //В этом месте размещено значение 7 } // Область видимости закончилась, выделенное // место и его содержимое уничтожаются

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

void myFunction() (
NSString* s = @"Hello, world!";       II Указатель и NSString
NSString* s2 = [s uppercaseString]; II Указатель и NSString } 
/ Два указателя прекращают существование...
// ... но что происходит со строками, на которые они указывали?

Некоторые объектно-ориентированные языки программирования, в которых ссылка на экземпляр является указателем, автоматически управляют памятью, на которую указывают ссылки на экземпляры (примерами являются REALbasic и Ruby). Но Objective-C не является одним из таких языков. Поскольку язык С ничего не говорит об автоматическом уничтожении того, на что указывают ссылки на экземпляры, Objective-C реализует явный механизм управления памятью. Позже (в главе 12) я расскажу об этом механизме и о том, какие обязанности ложатся на программиста при его использовании. К счастью, при наличии механизма ARC эти обязанности меньшие, чем были ранее; тем не менее памятью по-прежнему необходимо управлять, и вы по-прежнему должны отчетливо понимать, как работает управление памятью экземпляров.


Похожие статьи

 

 

 

 
 

У вас нет прав оставлять комментарии. Зарегистрируйтесь на сайте.