Плохой доступ к памяти: вопросы с выпусками, протоколами и делегатами - PullRequest
0 голосов
/ 05 октября 2011

У меня есть маленький вопрос с управлением памятью iOS ...

Ну, я определяю собственное представление с одним протоколом.В другом классе я создаю экземпляр другого класса, добавляю представление в другое представление и затем пытаюсь освободить экземпляр.Проблема возникает, когда я вызываю метод протокола, потому что я получаю ошибку BAD_ACCS.Это примерно так:

- (void)viewDidLoad{
    Class1 *c1 = [[Class1 alloc]init];
    [c1 setDelegate:self];
    [self.view addSubview:c1.view];
    [c1 release];
}

- (void)methodOfProtocolClass1 {
    NSLog(@"c1 method called")
}

У Class1 есть одна кнопка, и когда я нажимаю ее, я вызываю методOfProtoclClass1 и выдает ошибку.Кто-нибудь знает, как освободить этот объект?

Спасибо,

Дэвид

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Вы перепродаваете c1 здесь ...

- (void)viewDidLoad{
    Class1 *c1 = [[Class1 alloc]init]; //allocates Class1 instance with +1 ref count

    [c1 setDelegate:self];
    [self.view addSubview:c1.view];
    [c1 release]; //releases c1, ref count goes to 0 and the memory is reclaimed later
}

, поэтому вы получаете плохой доступ, ваш экземпляр c1 исчез и недействителен к концу вашего метода viewDidLoad

0 голосов
/ 05 октября 2011

Вам не нужно выпускать c1, вместо этого вы должны сохранить его! addSubview не сохраняет экземпляр c1, он сохраняет только свой вид! Если вы обратитесь к c1 позже, вы получите плохой доступ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...