Магистральный каталог является каталогом, с которым Вы являетесь, вероятно, самыми знакомыми, потому что это используется для содержания новых изменений. Ваша основная кодовая база должна быть в соединительной линии.
каталог ответвлений для содержания Ваших ответвлений, независимо от того, что они могут быть.
каталог тегов в основном для меток определенного набора файлов. Вы делаете это для вещей как выпуски, где Вы хотите "1.0" быть этими файлами в этих изменениях и "1.1", чтобы быть этими файлами в этих изменениях. Вы обычно не изменяете теги, как только они сделаны. Для получения дополнительной информации о тегах см. Глава 4. Ветвление и Слияние (в Управление версиями с Подрывной деятельностью ).
В дополнение к тому, что уже было указано, я хотел подробнее рассказать о логике -viewDidUnload
.
Одна из наиболее важных причин для его реализации заключается в том, что подклассы UIViewController
обычно также содержат ссылки-владельцы на различные подпредставления в иерархии представлений. Эти свойства могли быть установлены с помощью IBOutlets
при загрузке из пера или, например, программно внутри -loadView
.
Дополнительное владение субпредставлениями UIViewController
означает, что даже когда его представление удаляется из иерархии представлений и освобождается для экономии памяти, через которую подвиды также освобождаются представлением, они не будут фактически освобождены, потому что сам UIViewController
по-прежнему содержит свои собственные невыполненные сохраняющие ссылки на эти объекты. Освобождение UIViewController
дополнительных прав собственности на эти объекты гарантирует, что они будут освобождены, а также для освобождения памяти.
Объекты, которые вы освобождаете здесь, обычно воссоздаются и устанавливаются снова при просмотре UIViewController
повторно загружается
либо из пера, либо посредством реализации -loadView
.
Также обратите внимание, что свойство UIViewController
view
имеет значение nil
к моменту вызова этого метода.
Он вызывается в условиях нехватки памяти, когда контроллеру представления необходимо освободить свое представление и любые объекты, связанные с этим представлением, чтобы освободить вверх памяти.
В той же ситуации dealloc
вызывается , а не . Этот метод доступен только в OS3 и выше. Разобраться с той же ситуацией в iPhone OS 2.x было настоящей головной болью!
Обновление от июля 2015 г. : следует отметить, что viewDidUnload
устарел в iOS 6, потому что «Просмотры больше не удаляются. в условиях нехватки памяти, поэтому этот метод никогда не вызывается ". Поэтому современный совет - не беспокоиться об этом и использовать dealloc
.
Помните, что viewDidUnload
- это метод в контроллере представления, а не в представлении. Метод dealloc
представления будет вызван при выгрузке представления, но метод dealloc
контроллера представления может быть вызван позже.
Если вы получите предупреждение о нехватке памяти и ваше представление не отображается, что может произойти, например, каждый раз, когда вы используете UIImagePickerController, чтобы позволить пользователю сделать снимок, ваше представление будет выгружено, и после этого его необходимо будет перезагрузить.
если вы посмотрите на угловой круг, вы увидите, что есть 2 противоположных «угла», которые соответствуют вашему «среднему».
Таким образом, 185 ° и 5 ° равны правильно.
Но вы упомянули более близкое среднее . Поэтому в этом случае вы можете выбрать более близкий угол.
Обычно «среднее» значение углов относится к направлению против часовой стрелки. «Среднее» не то же самое, если вы переключите два угла (или если вы используете направление по часовой стрелке).
Например, при a = 20 °
и b = 350 °
, вы ищете угол, который следует за a
и перед b
в направлении против часовой стрелки , 185 °
- вот ответ.
Заключение:
Контроллеры представления имеют свойство представления. Обычно перо или фрагмент кода добавляют к этому представлению другие представления. Это часто случается внутри метода -viewDidLoad, например:
- (void)viewDidLoad {
[super viewDidLoad];
[self createManyViewsAndAddThemToSelfDotView];
}
кроме того, файл пера может создавать кнопку и добавлять ее к представлению контроллера представления.
В iPhone OS 2.2, когда -didReceiveMemoryWarning был вызван из системы , вам пришлось что-то выпустить, чтобы освободить память. Вы могли бы освободить представление всего контроллера представления, если это имело смысл. Или просто большое содержимое, потребляющее память.
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
Теперь в новой ОС 3.0 есть метод -viewDidUnload, который будет вызываться из системы, когда представление было выгружено из-за нехватки памяти (пожалуйста, поправьте меня: когда именно это вызывается?)
-viewDidUnload используется для освобождения всех объектов, которые принадлежали как самому контроллеру представления, так и представлению. Причина: если контроллер представления содержит ссылки на дочерние элементы представления, то есть кнопку, дочерние представления, на которые ссылаются, не будут освобождены, потому что их счетчик удержания> = 1. После того, как они были освобождены в -viewDidUnload, они могут быть освобождены. по памяти.
Это потому, что вы обычно устанавливаете @property
как "(nonatomic, retain)"
и поэтому сеттер, созданный для вас, освобождает текущий объект, а затем сохраняет аргумент, т.е.
self.property = nil;
... делает что-то вроде:
[property release];
property = [nil retain];
Таким образом, вы убиваете двух зайцев одним выстрелом: управление памятью (освобождение существующего объекта) и присвоение указателю значения nil (поскольку отправка любого сообщения указателю nil вернет nil).
Надеюсь, это поможет.
Если контроллер представления выскочил из стека контроллеров навигации и больше нигде не сохраняется, он будет деаллоцирован, и dealloc будет вызван вместо viewDidUnload. Вы должны освободить представления, созданные в loadView, в dealloc, но нет необходимости устанавливать переменные в nil, потому что вскоре после вызова dealloc переменные перестанут существовать.