대학 프로젝트 용 Objective-C에 명령 줄 응용 프로그램을 작성하려고합니다. 프로젝트는 행렬 조작이 필요하므로 모든 행렬 메소드 (더하기와 곱셈 등)를 처리하는 클래스를 작성했습니다. 내 매트릭스 방법은 다음과 같이 : 아이폰 OS는 ARC가 문제없이 내 모든 메모리 할당과 해제를 처리하는 기대에 대한 NSArray가 ARC에서 할당 해제되지 않았습니다. Objective-C
- (NSArray *)sumMatrices:(NSArray *)matrices
{
NSMutableArray *sum = [[NSMutableArray alloc] init];
NSInteger cols = [matrices[0][0] count];
NSInteger rows = [matrices[0] count];
for (int i = 0; i < rows; i++) {
NSMutableArray *row = [[NSMutableArray alloc] init];
for (int j = 0; j < cols; j++) {
CGFloat value = 0.0;
for (NSArray *array in matrices) {
value += [array[i][j] doubleValue];
}
[row addObject:[NSNumber numberWithDouble:value]];
}
[sum addObject:[row copy]];
row = nil;
}
return [sum copy];
}
그러나 프로그래머
이 프로그램에 엄청난 문제가,이 경우 그러나, 목표 - C를 사용하는 데NSMutableArray
'sum'은 절대 할당 해제되지 않으며이 메서드는 수천 번 실행되는 루프에서 호출되기 때문에 (RK4를 사용하여 이중 진자 모델링) 메모리 사용량이 늘어나고 프로그램이 매우 느려집니다.
이 메서드가 반환 된 후에 NSMutableArray
이 할당 해제되지 않는 이유가 있습니까? 많은 세부 사항으로가는없이
for 루프로 작성 했으므로 배열에 많은 시간 값이 추가 될 수 있습니다. –
할당되지 않은 배열은 어느 것입니까? 원본'sum' 또는 반환 할 사본? 반환 값을 지키고있는 것은 무엇입니까? –
그것은 당신이 원하는 것을하는 데 매우 비효율적 인 것처럼 보입니다. 'NSNumber' 객체를 다루는 것은 고통 스럽기 때문에'float's의 2 차원 배열 인'malloc()'을 사용한다고 말할 수 있습니다. * 길 * 더 빠를 것입니다. – trojanfoe