утечка памяти при удалении объектов в NSMutableArray - PullRequest
1 голос
/ 25 апреля 2010

Я надеюсь сохранить MYFileObj в NSMutableArray (fileArray) и отобразить данные в UITavleView (tableview).

//----------------------------------MYFileObj
#import <UIKit/UIKit.h>


@interface MYFileObj :  NSObject  {

    NSString *fileName;

}

-(void) setFileName:(NSString *)s ;
-(NSString *) fileName ;


@end

массив я хочу хранить данные

NSMutableArray *fileArray;

Я создал новый объект и добавил в fileArray

MYFileObj *newobj=[[MYFileObj alloc] init ];
NSString *ss=[[NSString alloc] initWithFormat:@"%@",path]  ;
[newobj setFileName:ss];
[ss release];
[fileArray addObject:newobj];
[newobj release];

[atableview reloadData];

После того, как в первый раз relayodData и что-то сделали, я хочу перезагрузить fileArray и перерисовать atableview.

//code to remove all object in atableview
if([fileArray count]>0)
{  
   [fileArray removeAllObjects];
   [atableview reloadData];
}  

Я заметил, что произошла утечка памяти. Я надеюсь узнать, что метод "removeAllObjects" удаляет только сами MYFileObj или также удаляет свойство члена MYFileObj "fileName"?

Спасибо

InterDev

Ответы [ 3 ]

2 голосов
/ 25 апреля 2010

Вы не указываете, где вы обнаружили утечку памяти, но я буду исходить из опубликованного кода, что вы не освобождаете fileName в методе dealloc MyFileObj.

1 голос
/ 25 апреля 2010

Хорошей практикой является использование удержания / освобождения в установщике. Таким образом вы избежите ненужного создания / копирования объекта:

- (void)setFileName:(NSString *)s {
    [s retain]; // <- Retain new value
    [fileName release]; // <- Release old value
    fileName = s;
}

- (NSString *)fileName {
    return fileName;
}

- (void)dealloc {
    [fileName release]; // <- Release the instance
    [super dealloc];
}
0 голосов
/ 25 апреля 2010

зависит от того, как вы реализовали setFileName и dealloc в своем классе MyFileObj. Вы отправляете сообщение release на fileName в dealloc? Вы посылаете это retain в свой сеттер?

...