iOS 캐시 풀 객체 재사용
1. 버퍼 설명
우리는 한 게임, 예를 들어 쿨하게 뛰는 유형의 게임이 게임 요소가 끊임없이 반복되는 것을 안다.게임 요소는 화면 오른쪽에서 끊임없이 만들어지고, 한 요소가 왼쪽 화면에서 옮겨지면 사라집니다.만약 끊임없이 new 대상이 있다면,release 대상은 성능에 영향을 줄 것이다.어떻게 최적화합니까?캐시 탱크의 개념과 관련이 있다.
다시 한 번 예를 들자면 한 주인공이 한 경기장에서 끊임없이 괴물을 죽인다.매번 다섯 명의 괴물이 나타나면 한 명을 죽이면 또 한 명이 나온다.매번 몬스터가 나올 때마다 new몬스터, 죽음몬스터는release몬스터로 낭비됩니다.이미 죽은 괴물, 우리가 간단하게 피를 채워주면 다시 사용할 수 있잖아!영화를 찍는 것처럼 한 사람이 진정으로 죽는 것은 아니다. 단지 죽은 것처럼 보일 뿐, 다시 사용할 수 있잖아!
2. 캐시 풀 단순화
우리는 사전에 new 10개의 몬스터를 하나의 수조에 넣을 수 있다. 간단하게 이 수조를 캐시 탱크라고 하는데, 사실은 하나의 수조이다.int의 변수를 하나 더 만들어서 수조에서 몇 번째 몬스터를 표시하고 0으로 초기화하면 첫 번째 몬스터를 표시합니다.
1. 우리가 화면에서 새로운 몬스터를 만들고 싶을 때 new가 아니라 그 int 변수로 그룹에서 몬스터를 하나 가져와서 사용한다. 물론 가져와서 사용하면 간단하게 초기화해서 피를 채워주고 온전한 옷을 입히는 등이다.인트 변수를 1 더하기. 인트 변수가 그룹의 길이와 같으면 0으로 분류합니다.
2. 한 괴물이 주인공에게 죽었을 때 이 괴물이 죽음 애니메이션을 방송한 후에remove를 하고 그를 완전히 release로 만들지 않는다.
거의 실현되지 않은 것이 바로 이렇다, 간단하지!초기 캐시 탱크, new 대상의 수량만 주의하십시오.일반적으로 네가 실제로 사용하는 수량보다 크다.
3. 단순 코드
// Vector<Bone*> bonePools;void createBonePools(){if(bonePools.empty()){for(int i = 0; i < 30; ++i){auto oneBone = Bone::create();bonePools.pushBack(oneBone);}}}
// int _boneIndex;Bone* getOneBone(){ if(_boneIndex == bonePools.size()){ _boneIndex = 0; } Bone* result = bonePools.at(_boneIndex); result->reuseInit();// , , ++_boneIndex; return result;}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.