Я не вижу, почему это будет протекать в первую очередь.
Вы должны подумать, что код, написанный разработчиками Apple, уже позволяет освободить изображение, которое камера приняла после завершения вызова делегата. Например, давайте притворимся, что это может выглядеть разработчик (pre-ARC, чтобы показать вам, что вам даже не нужна ARC для этого).
- (IBAction)userDidPressAccept:(id)sender
{
// Obtain image from wherever it came from, this image will start with
// Retain Count: 1
UIImage *image = [[UIImage alloc] init];
// Build an NSDictionary, and add the image in
// Image Retain Count: 2
NSDictionary *userInfo = [[NSDictionary alloc] initWithObjectsAndKeys:image, UIImagePickerControllerOriginalImage, ..., nil];
// Now the dictionary has ownership of the image, we can safely release it
// Image Retain Count: 1
[image release];
if ([self.delegate respondsToSelector:@selector(imagePickerController:didFinishPickingMediaWithInfo:)])
{
// Guy sees what he does with his image
// Image Retain Count: X (Depends on the user)
[self.delegate imagePickerController:self didFinishPickingMediaWithInfo:image];
}
// Ok, we're done. Dictionary gets released, and it can no longer own the image
// Image Retain Count: X-1 (Depends on the user)
[userInfo release];
}
В примере, если пользователь не retain
изображение (или даже не реализовать метод), то Х будет 1, и когда он попадает к конечному release
, изображение будет в течение хорошо. Если пользователь сохраняет изображение, изображение будет работать, но словарь, который его поддерживает, может получить dealloc
.
Это основная концепция «собственности», которая поставляется с подсчетом ссылок, это как стеклянный шар, который нужно передать вручную, и если у мяча нет руки под ним, он упадет и сломается.
ARC kinda маскирует все это, выполняя его самостоятельно, но основные понятия остаются, право собственности передается на реализацию делегата, и если нет делегата, который его утверждает, он будет удален.