Освобождение вида объекта - PullRequest
0 голосов
/ 17 марта 2011

Просто интересно, почему я получаю необъявленную ошибку baseView в dealloc при его создании.

CGRect baseFrame = CGRectMake(0, 0, 320, 480);
UIView *baseView = [[UIView alloc] initWithFrame:baseFrame];
self.view = baseView;

- (void)dealloc {
[baseView release];
[super dealloc];

}

Я создал представление с помощью alloc, я не уверен, почему я получаю ошибку при попытке освободить baseView. (Я получаю ту же ошибку при попытке установить его равным nil в viewDidUnload.

Ответы [ 4 ]

2 голосов
/ 17 марта 2011

Поскольку "baseView" не объявлен в файле .h, я бы предположил. Указатель существует только для жизненного цикла метода, в котором он объявлен.

Вы можете исправить это следующим образом:

CGRect baseFrame = CGRectMake(0, 0, 320, 480);
UIView *baseView = [[UIView alloc] initWithFrame:baseFrame];
[self.view addSubview:baseView];
[baseView release];

Представление сохранит базовый вид, так что вы можете пойти дальше и выпустить его здесь. Затем удалите ссылку в dealloc.

1 голос
/ 17 марта 2011

Указатель baseView объявляется локально в любом методе, в котором вы его создаете. Если вам нужно поиграться с baseView и в других методах, я предлагаю вам добавить его в качестве переменной экземпляра.

// MyClass.h
@interface MyClass {
    UIView *baseView; // declare as an instance variable;
}

@end

// MyClass.m
#import "MyClass.h"

@implementation MyClass

- (void)someMethod {
    baseView = [[UIView alloc] initWithFrame:..];
}

- (void)someOtherMethod {
    // baseView is accessible here
}

- (void)yetAnotherMethod {
    // baseView is accessible here too
}

@end
0 голосов
/ 17 марта 2011

baseView объявлен как локальная переменная и известен или может быть доступен только методом, в котором он объявлен.Если к нему должны обращаться другие методы класса, убедитесь, что baseView объявлена ​​как переменная экземпляра.

0 голосов
/ 17 марта 2011

попробуйте использовать с

[self.view addSubView:baseView];
[baseView release];

Если вы хотите освободить из dealloc, вам нужно объявить в .h файле

...