iPhone : 변수 출시에 대한 질문
-
06-07-2019 - |
문제
이 의사 코드를 고려하십시오.
// 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 :@""]는 어떻습니까? 할당 없음, 석방 할 필요 없음)