代码就像这样
public class Universe {//abstract layer for life game
public static final int SIZE = 100;
private int[][] universe;
private int[][] prev_universe;
public Universe() {
//Initializing Universe
universe = new int[SIZE][SIZE];
prev_universe = new int[SIZE][SIZE];
initializeTiles();
}//Universe()
//////
///various stuff
////
public void doStep(){
//backup the current state of the universe
for(int i = 0; i < Universe.SIZE; i++) {
prev_universe[i] = universe[i].clone();
}
//process data in "universe"
//check if universe has changed
if(deepEquals(universe, prev_universe)){
Log.d("CKdebug", "system is stable!");
systemStable = true;
}
}
}//class Universe
一切都很好,但我对一件事感到好奇。我除了prev_universe
以外的其他任何地方都没有真正使用doStep()
,以检查universe
的状态是否已更改。我想我可以把它变成一个局部变量。
问题是,它在内存消耗方面是否有益,并且由于每次prev_universe
doStep()
不断重建大型数组NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY children.@distinctUnionOfArrays.children.name contains[cd] %@",searchText];
,它会增加系统(CPU或其他)的负载。叫什么名字?什么是更好的做法?
答案 0 :(得分:3)
如果prev_universe
仅在单个方法中使用,则该方法应该是私有的。预分配一个小阵列(100x100很小)你不会获得太多收益。
通过使prev_universe
成为实例变量,您可能会在其他方法中重复使用它,这可能导致难以跟踪的错误(如果其他方法不将其视为本地变量,并依赖于其现有状态,每次调用doStep()
时都会重置该状态。