Я новичок в Objective-C, и я прочитал некоторые статьи по управлению памятью, но у меня возникли проблемы.
У меня есть класс примерно такой:
-(UIWebView*)getWebView{
//UIWebView* webview = [UIWebView initWithFrame:self.frame]; edited,the original wrong line
UIWebView* webview = [[UIWebView alloc] initWithFrame:self.frame];
return webview;
}
-(void)addToSelf{
UIWebView* view = [self getWebView];
[self addSubview:view];
[view release]; //release here
}
Вмоя мысль, объекты objc все похожи на указатели C (это так?) и мыслить так:
UIWebView* webview = [[UIWebView alloc] initWithFrame:self.frame]; //retain +1
UIWebView* view = [self getWebView]; //just a pointer to the same object ?
[self addSubview:view]; //retain +1
[view release]; //retain -1
Теперь посмотрите на retainCount = 1
.Тогда этот viewController будет обрабатывать жизненный цикл веб-просмотра.
Должно быть, что-то не так с моей мыслью (обязательно код), * 1012 *, но я не знаю, почему .
UIWebView* webview = [[[UIWebView alloc] initWithFrame:self.frame] autorelease];
Когда я удаляю последнюю строку выпуска, код работает нормально, почему? В чем разница?
-------------- строка редактирования ---------------
Несколько минут назад, есть ответ об этом, но он исчез, теперь я переписываю свою мысль:
Ответ говорит:
При возврате объекта из метода я должен использовать autorelease , чтобы сообщить компилятору, что с этим покончено, а затем с помощью addSubview завершить (не нужно выпускать).
Я знаю, что это правильно, но почему это правильно?
В большинствекодов:
-(void)someMethod{
UIWebView* webview = [[UIWebView alloc] initWithFrame:self.frame];
[self addSubview:webview];
[webview release];
}
это работает нормально, но если разделить код на два метода, таких как top, это не так.
Почему я должен использовать autorelease при возвратеобъект?