Попытка понять управление памятью на платформе iOS - PullRequest
1 голос
/ 19 августа 2010

Вот блок кода с утечками ...

NSString *filename = [NSString stringWithFormat:@"%@.png", sketchID];
CGImageRef imageRef = CGBitmapContextCreateImage(paintView.canvas.mBitmapContext);
UIImage* image = [[UIImage alloc] initWithCGImage:imageRef];
NSData* imageData = UIImagePNGRepresentation(image); 
  1. Где они?
  2. В общем, как я могу сказать, чтобы я не создавал утечкив будущем?
  3. Как правильно их исправить?

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 19 августа 2010

Насколько я могу судить, у вас есть memleaks в:

CGImageRef imageRef = CGBitmapContextCreateImage(paintView.canvas.mBitmapContext);

Вам нужно позвонить CGContextRelease .Проверьте этот ТАК вопрос.

Вы должны отпустить image также.После создания imageData выполните:

[image release];

Вам не нужно освобождать fileName, поскольку вы явно не выделяете для него память.Он будет автоматически освобождаться, когда переменная выходит из области видимости.В target-c есть соглашения об именах, которые сообщат вам, когда вам придется выпустить, а когда нет.Проверьте документацию Apple на это.

Надеюсь, это поможет.

0 голосов
/ 19 августа 2010

Общее правило таково: когда вы звоните alloc, вам нужен соответствующий release. Исключение составляют случаи, когда вы звоните autorelease. Кроме того, когда вы используете удобные методы, такие как stringWithFormat.

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