Je reçois des fuites de mémoire pointant vers la ligne « NSDictionary *dw = [NSDictionary dictionaryWithContentsOfFile:path];
» en utilisant le code suivantNSDictionary comme des biens
NSDictionary *_allData;
@property (nonatomic, retain) NSDictionary *allData;
@synthesize allData = _allData;
+ (NSString*)getNSPath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"alarm.plist"];
return path;
}
- (NSDictionary *)allData
{
NSString *path = [saveAlarm getNSPath];
NSDictionary *dw = [NSDictionary dictionaryWithContentsOfFile:path];
_allData = [NSDictionary dictionaryWithDictionary:dw];
return _allData;
}
Les données changent dans le pList et quand je demande de récupérer ce qui est nouveau là par PROPERTY elle fuites. Toute recommandation sur la façon de le rendre clair? Ou comment mettre en œuvre ce genre de chose sans fuites?
Merci
Cette solution provoque une fuite de mémoire de 864 octets sur la ligne où la conservation a été ajoutée. Je ne sais pas pourquoi je devrais le conserver quand c'est la méthode de classe. – Vanya
Ah. Lorsque vous renvoyez un objet via les limites de l'API, vous devez le renvoyer comme auto-libéré. Je vais mettre à jour le code. –
Vous devez le conserver car vous le stockez dans un ivar. Sinon, l'objet sera libéré pendant que votre ivar a encore une référence à lui. –