문제

이 의사 코드를 고려하십시오.

// an image is initialized
UIImage *imagePX = [[UIImage alloc]initWithContentsOfFile:... bla bla

imagePX = [self rotateImage:imagePX]; //A
[self doStuff:imagePX]; //B

그런 다음 RotateImage 메소드가 있습니다.

- (UIImage*) rotateImage:(UIImage*)source {
  ... rotate the image... draw on context...
  [source drawInRect... bla bla
  ...

  UIImage *rotatedImage =  UIGraphicsGetImageFromCurrentImageContext();

  return rotatedImage;
}

내 질문은 : ImagePX는 출시되지 않았습니다. 이미지가 Method RotateImage로 전달되면 [Source DrawInrect ...] 명령에 사용한 후 간단히 해제 할 수 있다고 생각했지만,이 방법에 대해 회전식을 반환 할 때 프로그램이 있으면 프로그램이 있습니다. 변수 imagepx가 존재하기 때문에 충돌이 발생합니다.

내 다른 문제는 이미지가 B에서 다른 루틴으로 전달된다는 것입니다. 그렇다면 ImagePX를 잃고 누출을 잃지 않고 작동하게하는 가장 좋은 방법은 무엇입니까?

가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

대신에

[[UIImage alloc]initWithContentsOfFile:... bla bla

사용

[UIImage imageWithContentsOfFile:...bla bla

후자는 자동 퇴치됩니다.

다른 팁

Uiimage 인스턴스를 할당 할 필요가 없습니다. imageWithContentsOfFile 정적 방법이며 클래스 자체에서 호출 될 수 있습니다.

부터 imageWithContentsOfFile 용어를 포함하지 않습니다 alloc, new, 또는 copy 반환 된 객체 (컨벤션별)는 유지되지 않으며 자동 제출 풀의 첫 번째 배수에서 자동으로 엘리브됩니다.

반대로,이 객체에 액세스하려고 할 때 EXC_BAD_ACCESS 오류를받는 이유를 알 수없는 비슷한 상황에 처한 경우 너무 빨리 출시되었을 것입니다. 이 경우이 클래스의 범위 내에서 수동 유지/출시를 원할 것입니다.

uiimage imageNamed :@""]는 어떻습니까? 할당 없음, 석방 할 필요 없음)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top