2

최근 ARC가 활성화 된 버전 0.8에서 2.0 &으로 기존 Cocos2D 프로젝트를 마이그레이션했습니다.Cocos2D 2.0 ARC가 제어되지 않은 dealloc을 활성화했습니다.

내가 한 방법은 애플의 빈 응용 프로그램 템플릿 &에 의해 이루어진 다음 큰 변화가 있으므로 Cocos2d 2.x 템플릿에서 코드를 추가하는 것입니다. 그 후 게임에서 코드를 추가하여 &은 ARC 문제에 대해 권장되지 않는 코드 &에 필요한 변경을가했습니다.

게임이 정상적으로 실행되지는 않았으므로 애니메이션이 없었습니다. & 게임이 전체 CPU 성능을 사용하고있었습니다. 콘솔에서 모든 것이 생성 된 직후에 해제된다는 것을 알았습니다. 내 장면이 푸시되기 전에도 내 오래된 코드가 그 이유가 아닙니다.

enter image description here

편집 또한 다시적인 Cocos2D 템플릿 프로젝트에서 ARC 지원 버전을 만든 & 전체 과정을 반복,하지만 너무 거기에 같은 .. 어쩌면 일상적인 일이?

답변

1

ARC로 변환 할 때 일반적인 문제는 있지만 일반적이지 않습니다. ARC는 범위 밖의 객체를 해제하지만 MRC에서는 alloc/init 객체가 메모리에 남아있게됩니다 (누출). 강력한 참조를 유지해야하는 곳을 확인하십시오.

MRC에서
-(void) someMethod 
{ 
    id object = [[MyObject alloc] init]; 
} 

, 오브젝트 것으로 someMethod 반환 후 메모리 (누수)에 남아 :

여기 ARC로 변환하기 전에 일을 예입니다. ARC에서 ARC는 메서드가 반환 될 때 개체를 정리합니다. 가장 간단한 해결 방법은 객체를 ivar (일명 인스턴스 변수, 클래스의 멤버)로 바꾸는 것입니다.

또한 싱글 톤을 확인하십시오. 그것의 구현 방식에 따라 Singleton 클래스는 곧바로 dealloc 될 수 있습니다. 예를 들어 정적 인스턴스가 __weak 또는 __unsafe_unretained로 선언 된 경우

Xcode Analyzer (빌드 -> 분석)를 실행하여 잠재적 인 문제의 포인터를 받아야합니다.

+0

이것은 다소 적다. 프레임 워크 내에서 뭔가있을 수 있기를 바랐다.하지만 오랜 시간 리팩토링 한 후에는 예상대로 모든 것이 실행된다. 고마워! – Kex