OpenFlow вылетает при попытке сброса / воссоздания приложения - PullRequest
0 голосов
/ 16 июля 2010

Я отчаянно пытаюсь изменить изображения на экземпляре 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 Ответ

0 голосов
/ 16 июля 2010

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

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

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

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

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

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

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

...