iOS 캐시 풀 객체 재사용

1985 단어

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;}

좋은 웹페이지 즐겨찾기