проблема с NSmutableArray - PullRequest
       19

проблема с NSmutableArray

0 голосов
/ 09 февраля 2011
    - (void)createTileOnScreen:(CGRect)rect
    {
    myArray = [[NSMutableArray alloc] init];
    CGRect bounds = rect;
    CGRect myRect = CGRectMake(bounds.origin.x,bounds.origin.y, 
            (int)(bounds.size.width / 11), 
            (int)(bounds.size.height / 10)); 

    for (int i = 0; i < 10; i++) {

        for (int j = 0; j < 11; j++) {
            int index = 10 * i + j;

            Liv *myTile  = [[Liv alloc] initWithFrame:myRect withIndex:index]; 

            float width = (1.0 / 11);
            float height = (1.0 / 10);

                [myTile setImageSection:CGRectMake((j / 11), 
                    (1.0 - ((i+1) / 10)), 
                    width, 
                    height)];
            [self.rotationView addSubview:myTile];
            [myArray addObject:myTile];
            [myTile release];
            myRect.origin.x += myRect.size.width;
        }

        myRect.origin.x = bounds.origin.x;
        myRect.origin.y = myRect.origin.y + myRect.size.height ;



    }
}





    #import "Liv.h"


    @implementation Liv
    @synthesize index;

    - (id)initWithFrame:(CGRect)frame withIndex:(int)index_ {
    if (self = [super initWithFrame:frame]) {
        self.index = index_;
        self.backgroundColor = [UIColor blackColor];
        fadingAnimationDuration = 2.0;
    }
    return self;
    }

    - (id)initWithFrame:(CGRect)frame withIndex:(int)index_ WithColor:(UIColor *)aColor {

    if (self = [self initWithFrame:frame withIndex:index_]) {
        self.backgroundColor = aColor;

    }
     return self;
    }

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

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Move

 myArray = [[NSMutableArray alloc] init];

Из

- (void)createTileOnScreen:(CGRect)rect


[myArray release];

Хорошо выпустит ваши плитки. Но вы можете захотеть перебрать массив перед выпуском и

 [[myArray objectAtIndex:index] removeFromSuperview];
0 голосов
/ 09 февраля 2011

Как определяется myArray? Это переменная экземпляра с соответствующими ей @propoerty и @synthesize?

должно быть

self.myArray = [NSMutableArray array];

с соответствующим

@property(retain) myArray; 

в файле .h. Тогда ты будешь в порядке. Согласно тому, что у вас есть сейчас, каждый раз, когда

- (void)createTileOnScreen:(CGRect)rect
* Вызывается

, старый NSMutableArray, удерживаемый myArray, протекает при его замене новым NSMutableArray, назначенным myArray.

...