2011-07-29 4 views
0

비슷한 문제를 검색하려고했지만 좋은 해결책을 찾지 못했습니다. 누군가가 나를 도울 수 있기를 바랍니다. 기본적으로메모리 누수, nsmutablearray 및 사용자 지정 개체

나는 카드 객체와 배열합니다 (tempArray가 생성되고이 루프 위에 채워집니다) 웁니다이 방법에서 누출이 있습니다

for(int i = 0; i < numberOfCards; i += 2) { 
    int randomNumber = (arc4random() % [tempArray count]); 
    NSNumber *number = [tempArray objectAtIndex:randomNumber]; 
    [tempArray removeObject:number]; 

    Card *card1 = [[Card alloc] initWithCategory:category andNumber:[number intValue]]; 
    Card *card2 = [[Card alloc] initWithCategory:category andNumber:[number intValue]]; 

    [number release]; 

    [cards addObject:card1]; 
    [cards addObject:card2]; 
} 

이 방법은 좀 더 논리를 포함 않습니다,하지만 나는 꽤이 루프가 누수가 포함되어 있는지 확인하십시오. 인스 트루먼 트와 함께 실행할 때, 카드 오브젝트가 해제되지 않습니다. dealloc 메서드에서 배열을 해제했는데 배열 안에있는 객체도 해제 할 것이라고 생각했습니다.

-(void) dealloc { 
    [cards release]; 

    [super dealloc]; 
} 

나는 card1과 card2에서 autorelease를 시도하여 클래스 변수로 만들려고 시도했다. 그러나 아무것도 도움이되는 것 같지 않습니다. 누수가 있거나 카드 1 또는 카드 2에 릴리스를 추가하려고하면 응용 프로그램이 충돌합니다. 누구나 여기서 무엇이 잘못 됐는지 알 수 있습니까?

+0

N.B. 후 당신이 소유하지 않기 때문에'number'를 공개해서는 안됩니다. – albertamg

+0

팁, 감사합니다. –

+0

당신은 환영합니다 :) – albertamg

답변

2

cards에 추가 한 후 각 Card 개체를 릴리스해야합니다. cards에 추가하면 각 개체의 보유 개수가 자동으로 증가합니다. 따라서 추가

[card1 release]; 
[card2 release]; 

[cards addObject:card1]; 
[cards addObject:card2]; 
+0

고마워요. 그러나 dealloc 메서드에서 충돌이 발생합니다. [카드 릴리스]라고합니다. 이유가 확실하지 않습니다. –

+0

[카드 보유]; 카드 = [[NSAMutable alloc] ..];라고 말한 코드의 모든 위치를 찾습니다. 그런 다음 [카드 출시]라고 말한 모든 장소에서 그들은 서로 취소해야합니다. –

+0

마지막으로 도움을 주셔서 감사합니다. 카드 객체에는 두 가지 속성이 있습니다. 설정을 image = ... 및 text = ...에서 self.image =로 변경하고 self.text =로 변경했습니다. 왜 그런지 알아? –