2014-10-10 3 views
8

사용자 정의 키보드 아이폰 OS 8사용자 정의 키보드 인해

처음에 내 사용자 지정 키보드 메모리 25MB의 주위에 복용되는 메모리 압력으로 인해 종료받을 아이폰 OS 8에서 메모리 압력에 종료 얻을,하지만 난을 dissmiss에이 메모리가 해제되지 않는다 건반. 사용자 정의 키보드를 다시 열어 메모리가 계속 증가하면 메모리가 계속 증가하고 메모리 압력으로 인해 결국 종료됩니다.

이 문제와 관련해 도와주세요.

+0

정확하게 문제가있는 곳에서 코드를 게시 할 수 있습니까? – iGW

답변

1

당신은 KeyboardViewController

1

키보드 확장 키보드가 사라진 후 계속 프로세스에서 실행의 ViewWillDisappear 기능에 몇 가지를 할당 해제 할 수 있습니다. 키보드보기 컨트롤러는 키보드를 만들 때마다 새로 만들어 지지만보기 컨트롤러가있는 프로세스가 유지됩니다. 그래서보기 컨트롤러가 닫힐 때 메모리를 비 웁니다. 이미지를 사용하고 있다면 imageNamed를 사용하고 싶지 않을 것입니다 : imageWithContentsOfFile :을 사용하고 싶을 것입니다. 왜냐하면 UIImage는 지속될 imageNamed 캐시를 사용하기 때문입니다. 키보드가 사라지기 전에

1

나는이 유명한 메모리 축적 문제를 방지 할 수있는 방법의 톤을했지만, 내 오래 오래 재판에 & 오류를 따라 한 최고의 가장 간단한 방법은 모든 메모리를 해제하는 것은 KeyboardViewControllerviewWillDisappearexit(0)를 호출하는 것입니다 .exit(0)

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    exit(0); 
} 

[업데이트]는 키보드 확장 프로세스를 종료 이후의 모든 메모리를 해제하는 것이 완벽했다. 불행히도 프로세스를 죽이는 것 같이 iOS가 불안정 해지는 것 같습니다.
따라서 가장 안정적인 방법은 할당 된 모든 객체를 가능한 한 많이 해제하는 것입니다 (viewWillDisappear). 모든 사용자 정의보기 예를 들어,

모든 사용자 지정보기 컨트롤러에 대한

  • 등등 파단, 제약, 제스처, 강력한 위임 등과 같은 뷰와 뷰 컨트롤러의 모든 강한 참조를 제거합니다. 뷰 컨트롤러의 모든 객체 속성

    [aView removeFromSuperview]; 
    [aView removeConstraints:aView.constraints]; 
    for (UIGestureRecognizer *recognizer in aView.gestureRecognizers) 
        [aView removeGestureRecognizer:recognizer]; 
    
  • 설정 nil. 다른 큰 사용자의 경우

aViewController.anObject = nil; 

  • 등등 모든 배열, 사전에서 추가 된 모든 오브젝트를 제거하고 객체.

    [anArray removeAllObjects]; 
    
  • imageNamed:을 사용하여 이미지를 캐시하지 마십시오.

잘 풀어 경우, 메모리 사용량이 디버깅이 증가되지 않을 때 또는 아주 약간 (기각 당 < 0.1MBytes을) 증가했다. 사용자 정의 오브젝트가 가능한 많이 릴리스 되더라도 많은 해고 후에 메모리 사용이 증가하면, 언로드의 일부 위험을 제외하고 exit (0)를 주기적으로 호출 할 수 있습니다.

+0

나는 너 같은이 문제를 다루고있다. 나는'exit (0);을 시도했다. 그것의 매우 효과적이다. 그것은 단순히 과정을 죽입니다. 그러나 그것은 키보드가 매번 그것을 느리게 만들 것입니다. iOS에는 빠른 프로세스를 위해 키보드가 캐시되어 있다고 생각합니다. 모든 하위 뷰, 제약 조건을 제거하려고했으나 프로세스가 아직 남아 있고 키보드를 사용할 때마다 메모리가 계속 증가합니다. ( – TomSawyer

+0

일반적으로 사용자가 만든 모든 "개체"는 viewWillDisapear에서 제거해야합니다. 요점은 iOS 메모리 누수와 결국 키보드 충돌을 막기 위해 사용자 정의보기와 제약 조건이 아닌 모든 사용자 정의 "객체"를 제거해야한다는 것입니다. 배열, 사전, 세트 또는 기타 객체를 제거했는지 확인하십시오. ve 만든. 정말 성가신하지만 작동합니다. – NeonBerry

+0

포함 된 모든 개체를 제거했습니다 : 클래스 인스턴스, 제약 조건,보기, 사전 및 일부 응용 프로그램 (viber)처럼 실행되지 못했습니다, 왜 나 몰라요. 몇 가지 변수를 남겨야합니다. 그리고 만약 내가 이미 모든보기를 제거하면, 또한 제약 조건과 제스처를 제거해야합니까? 기본적으로, 내가보기를 제거하면, 제약 조건은 자동으로 역시 감동 받았다. – TomSawyer

관련 문제