2

ARC를 사용한 메모리 관리에 관한 몇 가지 일반적인 초보자 질문이 있습니다. 내 앱과 기기 및 시뮬레이터에서 성능 문제가 발생합니다. 성능 문제는 "망막"모드에서 시뮬레이터를 실행할 때만 나타납니다. 따라서 "메모리"문제가 있어야한다고 생각합니다. 내 장치에서 앱을 테스트 할 때 내 로그에 "수신 된 메모리 경고"도 표시되었습니다.ARC를 통한 메모리 관리 - 성능 문제

먼저, 하위보기에 사용할 UIImages를 만들 때 하위보기에 할당 한 후에 해당 이미지를 nil로 설정해야합니까? 예 :

UIImage * image = [UIImage imageNamed:@"Image.png"]; 
UIImageView * imageView = [[UIImageView alloc] initWithImage:image]; 
[self.view addSubview:imageView]; 
// Should I set image && imageView to nil here? 

다른 로컬 변수 및 인스턴스 변수에도 적용됩니까?

둘째,

UiView * view; 

// And implement it in @implementation 
view = [[UIView alloc] initWithFrame:frame]; 

모든 지침과 팁을 주시면 감사하겠습니다, 내가 현재 사용하고, 인스턴스 변수를 만들 수있는 올바른 ARC 방법 것입니다. 좋은 ARC 리소스에 대한 링크도 훌륭합니다.

답변

4

코드는 정상입니다. 메모리 관리에는 문제가 없습니다. 문제가 발생할 수있는 것은로드 된 이미지를 캐쉬하기 때문에 [UIImage imageNamed:]입니다. 대신 [[UIImage alloc] initWithContentsOfFile:]을 사용해보세요.

당신은 ARC here

+0

답변 해 주셔서 감사합니다. 내가 회전을 처리하는 방식에 성능 문제가 있다고 생각한다. 현재 회전 코드는 다음과 같이 보입니다 : self.pageView.transform = CGAffineTransformMakeRotation (M_PI * (-90)/180.0); self.pageView.transform = CGAffineTransformScale (self.pageView.transform, 0.8375,0.8375); self.view.bounds = CGRectMake (-75.7, 73.7, 480.0f, 268.0f);'이 줄을 주석 처리하면 성능이 정상입니다. 가로 및 세로에 대한 두 개의 개별보기를 만들어서 도움이되는지 확인하겠습니다. 감사. – Anders

2

모두 당신이 괜찮 가지고있는 ARC 관련 질문에 대한 좋은 기사를 찾을 수 있습니다. 변수를 수동으로 nil로 설정하지 않아도됩니다. 범위를 벗어나면 자동으로 nil로 설정됩니다. ARC는 인스턴스 변수를 유지/해제하는 방법을 파악하므로 특별한 작업을 수행 할 필요가 없습니다.

언급 한대로 문제는 망막 디스플레이에서 응용 프로그램을 실행할 때 발생합니다. 문제의 코드가 이미지와 밀접하게 관련되어 있다는 점을 감안할 때 문제는 이미지와 관련이 있다고 의심합니다. Image.png은 고해상도이며 망막 장치는 많은 메모리를 사용하는 방식으로 할당 될 수 있습니다.

나는 당신이 시도하는 것이 좋습니다 :

  • A) 이미지보기에 initWithFrame:를 호출하고 나중에 setImage:, 이미지보기하거나 크기를 조정할 때문에 이상한 UIImage 망막 행동 이상하게 처리되지 않습니다 이런 식으로 호출.
  • b) 수동으로 자원의 크기를 작게 조정하십시오 (Image.png). 이 작업은 미리보기와 같은 기본 이미지 편집기를 통해 수행 할 수 있습니다.