Я выделяю вьюконтроллер без инициализации, но почему все работает нормально

Я выделяю контроллер просмотра без его инициализации, но все работает нормально. Подвиды в контроллере представления работают нормально.

Вот код.

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[ViewController alloc]];

Код в ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self test];
}


- (void)test
{
    self.view.backgroundColor = [UIColor whiteColor];
    CGRect frame = CGRectMake( 50, 100, 200, 200);
    UIScrollView *scrollView= [[UIScrollView alloc] initWithFrame:frame];
    [self.view addSubview:scrollView];
    frame= CGRectMake( 0, 0, 500, 500);
    UIImageView *myImageView= [[UIImageView alloc] initWithFrame:frame];
    [scrollView addSubview:myImageView];
    scrollView.contentSize = CGSizeMake(500,500);

    scrollView.backgroundColor = [UIColor blackColor];
    myImageView.backgroundColor = [UIColor yellowColor];

    scrollView.contentOffset = CGPointMake(0, 0);

}


@end

person Zentopia    schedule 08.11.2015    source источник
comment
Действительно ли ViewController что-нибудь делает?   -  person Arc676    schedule 08.11.2015
comment
Я помещаю код ViewController.m в описание вопроса.   -  person Zentopia    schedule 08.11.2015
comment
Ну, если я правильно помню, init в основном просто инициализирует переменные. Похоже, у вас нет глобальных, и я уверен, что ViewController расширяет NSObject, поэтому, возможно, вам не нужно вызывать init.   -  person Arc676    schedule 08.11.2015
comment
@ Arc676 большое спасибо!   -  person Zentopia    schedule 08.11.2015
comment
Просто догадка. Если этот вопрос получит больше внимания, кто-то сможет дать лучший ответ.   -  person Arc676    schedule 08.11.2015
comment
Это работает благодаря глупому везению. Не пишите такой код. Так уж получилось, что UIViewController и его предки не инициализируют ничего критичного в init.   -  person Avi    schedule 08.11.2015
comment
@Avi Большое спасибо!   -  person Zentopia    schedule 08.11.2015
comment
@Avi, тебе действительно следует опубликовать свой комментарий о глупой удаче в качестве ответа, чтобы ОП мог его принять. Ты первый это сказал.   -  person Duncan C    schedule 08.11.2015


Ответы (1)


Ави правильно понял в (своем?) комментарии. Это глупая удача. Это все равно, что сказать: «Я проехал на своей машине 30 000 км, не меняя масло, и она работает нормально. Почему все говорят, что вам нужно менять масло?»

Init выполняет настройку класса и его классов-предков. Совершенно очевидно, что есть некоторая невыполненная настройка, которая вызовет проблемы в будущем.

Правильный способ создания объекта — с помощью alloc/init. Если вы этого не сделаете, «результат не определен».

person Duncan C    schedule 08.11.2015