Если вы посмотрите в документации по UIViewController, вы увидите, что свойство view объявлено как:
@property(nonatomic, retain) UIView *view;
Это означает, что когда вы используете setView: метод (или используете .view слева от =), то любое значение, которое вы передаете, будет сохранено. Итак, если вы пройдете по коду и посмотрите, сколько осталось, вы получите следующее:
- (void)loadView {
// Create the main view
UIView *contentView = [[UIView alloc] initWithFrame:
[[UIScreen mainScreen] applicationFrame]]; //retain count +1
contentView.backgroundColor = [UIColor whiteColor]; //retain count +1
self.view = contentView; //retain count +2
[contentView release]; //retain count +1
// Get the view bounds as our starting point
CGRect apprect = [contentView bounds];
// Add each inset subview
UIView *subview = [[UIView alloc]
initWithFrame:CGRectInset(apprect, 32.0f, 32.0f)];
subview.backgroundColor = [UIColor lightGrayColor];
[contentView addSubview:subview];
[subview release];
}
Я бы сказал, что действительно интересно то, что после выпуска contentView мы все еще можем отправлять ему сообщения, потому что объект, живущий в конце указателя contentView, все еще существует (поскольку он был сохранен путем вызова setView:).