Получение количества выделений плюс один в UIImage в target-c? - PullRequest
0 голосов
/ 10 июля 2010

Я получаю количество выделений плюс один в следующем коде.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"MasterViewIdentifier"] autorelease];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selectionStyle = UITableViewCellEditingStyleNone;
        UIView* elementView =  [ [UIView alloc] initWithFrame:CGRectMake(5,5,312,480)];
        elementView.tag = 0;
        [cell.contentView addSubview:elementView];
        [elementView release];
    }
    UIView* elementView  = [cell.contentView viewWithTag:0];
    for(UIView* subView in elementView.subviews)
    {
        [subView removeFromSuperview];
    }

    if(indexPath.section==0)
    {
        if(indexPath.row==0)
        {
                   // i have tried like this but getting exception.
            /*
            UIImage *cellBackImag=[UIImage imageNamed:@"celltop.png" ];
            UIImageView* imaeView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 43)];
            imaeView.image=cellBackImag;
            [elementView addSubview:imaeView];
            [imaeView release];
            [cellBackImag release];
             */


            // here I am getting uiimage count allocation count 
            UIImageView* imaeView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"celltop.png" ]];
            imaeView.frame=CGRectMake(0, 0, 300, 43);
            [elementView addSubview:imaeView];
            [imaeView release];

Пожалуйста, помогите мне с этим, Спасибо, Мадан Мохан

1 Ответ

2 голосов
/ 10 июля 2010

Прежде всего, вы не должны полагаться на счет сохранения, потому что когда вы передаете объект какому-либо методу, все может произойти с этим объектом, как, например, кто-то его удерживает, снова автоматически выпускает его, передает его другому методу и т. Д.Таким образом, значение является очень неточным.

Но здесь, в вашем случае, счет сохранения (по крайней мере) +1 является правильным, потому что вы хотите, чтобы ваше изображение оставалось живым после того, как вы добавили его как подпредставление дляelementView, поэтому [element addSubview:imageView] сохраняет представление вашего изображения (добавляя +1 к количеству сохраняемых данных), а затем вы снова отпускаете его (оставляя +1 от alloc init).

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

Так что в основном просто придерживайтесь второго подхода (alloc, init, add, release) и забудьте осохранить счет.Если вас беспокоят утечки памяти, вам следует взглянуть на Instruments, который является отличным инструментом для поиска всевозможных ошибок.

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