OpenFlow вылетает при попытке сброса / воссоздания приложения

Я отчаянно пытаюсь изменить изображения на экземпляре OpenFlow без удачи. Я как бы сдаюсь, поэтому сейчас пытаюсь удалить экземпляр и создать новый. Но я не могу избежать сбоя приложения.

Код для его создания:

AFOpenFlowView *of = [[AFOpenFlowView alloc] initWithFrame:CGRectMake(0, 100, 320, 380)];
 [of setCenter:CGPointMake(160, 240)];
 [of setBackgroundColor:[UIColor blackColor]]; 
 [of setDataSource:self];
 [of setViewDelegate:self];

 [self setPeopleFlow:of];      
 [self.view addSubview:peopleFlow];

 [of release];

Затем одним нажатием кнопки я делаю:

[peopleFlow removeFromSuperview];
[peopleFlow release];

Позже я вызываю ту же функцию с первым блоком кода, чтобы создать его снова, и это происходит, когда приложение завершает работу без ошибок журнала.

Любые идеи о том, как очистить объект OpenFlow, чтобы снова заполнить его без необходимости удалять / воссоздавать? Или как создать / воссоздать надежно?

1 ответ

Решение

Когда вы создаете экземпляр peopleFlow, он имеет счет сохранения 1.

Затем, когда вы добавляете его в качестве подпредставления, суперпредставление сохраняет его, поэтому его счетчик равен 2.

Затем вы отпускаете его после добавления его в суперпредставление, так что его счет удержания снова равен 1.

Затем Вы удаляете его из суперпредставления, и супервизор освобождает его, поэтому его счетчик сохранения равен 0, и объект освобождается.

Затем вы пытаетесь выпустить его снова, и он падает, потому что вы отправляете release на освобожденный объект.

Короче говоря, в этом случае вам не нужно выпускать его после удаления из суперпредставления.

Кроме того, хорошей практикой является присвоение nil указателю, если вы отпустите его, и вам больше не важно, на что он указывает. Это связано с тем, что после того, как вы освободили и освободили объект, переменная-указатель все еще указывает на память, которую занимал объект. Присвоение nil указателю предотвратит любые неприятности, если вы попытаетесь отправить сообщение тому, на что указывает свисающий указатель.

Другие вопросы по тегам