2010-03-23 4 views
0

Je reçois fuite de mémoire dans l'allocation NSMutableArray .. dansFuite de mémoire dans l'allocation NSMutableArray

NSMutableArray *contactsArray =[[NSMutableArray alloc] init]; 

CODE:

+(NSMutableArray*)getContacts 
{ 
    addressBook = ABAddressBookCreate(); 

    NSArray* peopleArray = (NSArray*) ABAddressBookCopyArrayOfAllPeople(addressBook); 

    int noOfPeople = [peopleArray count]; 

    NSMutableArray *contactsArray =[[NSMutableArray alloc] init]; 

    for (int i = 0; i < noOfPeople; i++) 
    { 
     ABRecordRef person = [peopleArray objectAtIndex:i]; 
     ABRecordID personId = ABRecordGetRecordID(person); 
     NSString* personIdStr = [NSString stringWithFormat:@"%d", personId]; 

     ContactDTO* contactDTO = [AddressBookUtil getContactDTOForId:personIdStr]; 


     [contactsArray addObject:contactDTO]; 

    } 
    [peopleArray release]; 
    return contactsArray; 

} 
+4

Ceci est la * quatrième * question de fuite de mémoire que vous avez demandé aujourd'hui. Vous devriez vraiment lire la documentation sur la gestion de la mémoire à http://developer.apple.com/mac/library/documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html – Isaac

+1

... plus la seule démarque: http: // stackoverflow. com/editing-help –

Répondre

0

Vous devez libérer contactsArray manuellement quelque part, parce qu'il ne définit pas autorelease.

+0

J'ai essayé d'utiliser autorelease lors de l'allocation. mais il provoque une exception. Je dois libérer le tableau avec cette méthode. Pouvez-vous suggérer une autre solution –

2

Il est de règle que les objets renvoyés par les méthodes (dans votre cas, contactsArray) soient libérés avant d'être renvoyés. Vous pouvez soit return [contactsArray autorelease]; ou le créer déjà autoeleased avec [NSMutableArray arrayWithCapacity:noOfPeople]