문제

나는 아직도 내 누출 문제를 해결하고 있으며 각 arraytmp addobject 라인에 누출이있는이 문제를 해결하는 방법을 모르겠습니다.

NSMutableArray *arrayTmp= [[NSMutableArray alloc] init];


[arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"1", @"value", @"Value 1", @"name", nil]];
[arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"2", @"value", @"Value 2", @"name", nil]];
[arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"3", @"value", @"Value 3", @"name", nil]];
[arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"4", @"value", @"Value 4", @"name", nil]];
//add arrayTmp to an object to use later
[arrayTmp release];
arrayTmp=nil;

arrayTmp= [[NSMutableArray alloc] init];

[arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"1", @"value", @"other value 1", @"name", nil]];
[arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"2", @"value", @"other value 2", @"name", nil]];
//add arrayTmp to an object to use later
[arrayTmp release];
arrayTmp=nil;
...

여기 내 필터 클래스의 코드가 있습니다

@implementation Filter

@synthesize label;
@synthesize valueIndex;
@synthesize listValue;
@synthesize webServiceFieldName;

-(id) initWithLabel:(NSString *)plabel AndValue:(int)pvalueIndex AndListValue:(NSMutableArray *)plistValue AndWebServiceFieldName:(NSString *)pwebServiceFieldName {

self = [super init];

if (self != nil) {
    self.label = plabel;
    self.valueIndex = pvalueIndex;
    self.listValue = plistValue;
    self.webServiceFieldName = pwebServiceFieldName;

}
return self;
}

@end
도움이 되었습니까?

해결책 4

좋아,이 변경을했지만 여전히이 줄에 수십 개의 누출이 있습니다. 여기에 내 코드 샘플이 있습니다.

-(id)initSearchFilters{
    self = [super init];


    if ( self ) {

    //init the search filters array
    self.searchFilters = [[NSMutableArray alloc] init];
    SearchCriteria *searchCriteriaTmp;
    Filter *filterTmp1;
    Filter *filterTmp2;
    NSMutableArray *arrayTmp= [[NSMutableArray alloc] init];

    //Price Range
    arrayTmp = [[NSMutableArray alloc] init];

    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"any", @"value", @"any", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"100", @"value", @"$100", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"200", @"value", @"$200", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"300", @"value", @"$300", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"400", @"value", @"$400", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"500", @"value", @"$500", @"name", nil]];


    filterTmp1 = [[Filter alloc] initWithLabel:@"Minimum Price" AndValue:0 AndListValue:arrayTmp AndWebServiceFieldName:@"price_min"];
    filterTmp2 = [[Filter alloc] initWithLabel:@"Maximum Price" AndValue:0 AndListValue:arrayTmp AndWebServiceFieldName:@"price_max"];
    searchCriteriaTmp = [[SearchCriteria alloc] initWithFilter1:filterTmp1 AndFilter2:filterTmp2 AndLabelSearchCriteria:@"Price Range" AndEnabled:NO];
    [self.searchFilters addObject:searchCriteriaTmp];
    [arrayTmp release];
    arrayTmp=nil;
    [filterTmp1 release];
    filterTmp1=nil;
    [filterTmp2 release];
    filterTmp2=nil;
    [searchCriteriaTmp release];
    searchCriteriaTmp=nil;

    //Item
    arrayTmp = [[NSMutableArray alloc] init];

    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"1", @"value", @"item 1", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"2", @"value", @"item 2", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"3", @"value", @"item 3", @"name", nil]];
    [arrayTmp addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"4", @"value", @"item 4", @"name", nil]];

    filterTmp1 = [[Filter alloc] initWithLabel:@"Item" AndValue:0 AndListValue:arrayTmp AndWebServiceFieldName:@"item"];
    searchCriteriaTmp = [[SearchCriteria alloc] initWithFilter1:filterTmp1 AndFilter2:nil AndLabelSearchCriteria:@"Item" AndEnabled:NO];
    [self.searchFilters addObject:searchCriteriaTmp];
    [arrayTmp release];
    arrayTmp=nil;
    [filterTmp1 release];
    filterTmp1=nil;
    [searchCriteriaTmp release];
    searchCriteriaTmp=nil;
    }
    return self;
}

그리고 내 검색 기준 클래스

-(id)initWithFilter1:(Filter *)pFilter1 AndFilter2:(Filter *)pFilter2 AndLabelSearchCriteria:(NSString *)pLabelSearchCriteria AndEnabled:(BOOL)pEnabled{

self = [super init];

if (self != nil) {
    self.filter1 = pFilter1;
    self.filter2 = pFilter2;
    self.labelSearchCriteria = pLabelSearchCriteria;
    self.enabled =pEnabled;
}
return self;
}

- (void)dealloc
{
[filter1 release];
[filter2 release];
[labelSearchCriteria release];
[super dealloc];
}

다른 팁

//add arrayTmp to an object to use later

즉, 배열을 물체로 밀어 넣고 -자리에 묶고 있음을 의미합니다. 코드는 그렇지 않으면 괜찮지 만 누출이 해당 방법에 있다고 내기합니다.

ArrayTMP와 출시되는 코드를 저장하는 방법에 대한 코드 (btw, btw, value : listvalue : webservicefieldname : webservicefieldname : webservicefieldname : webservicefieldname : webservicefieldname : webservicefieldname : webservicefieldname)를 게시하십시오.

악기에서는 객체 할당 기기를 사용하여 배열 인스턴스를 볼 수 있어야합니다. 하나를 클릭하면 해당 주소에 대한 할당/유지/릴리스/거래 이벤트 목록을 제공해야합니다. 창의 오른쪽에있는 "추가 정보"창을 확장하여 주어진 이벤트의 스택 추적을 볼 수 있습니다 (하단의 작은 버튼을 통해).

아래 코드에서 이니셜 라이저는 tmparray에서 통과 된 것을 포함하여 ivars를 설정합니다.

    self.label = plabel;
    self.valueIndex = pvalueIndex;
    self.listValue = plistValue;
    self.webServiceFieldName = pwebServiceFieldName;

그러나 -dealloc 메소드가 보이지 않습니다.

귀하의 속성이 어느 쪽이든 선언되었다고 가정합니다 retain 또는 copy, 당신의 거래는 다음과 같아야합니다.

- (void) dealloc
{
    [label release];
    [listValue release];
    [webServiceFileName release];
    [super dealloc];
}

이 개체를 거래 할 때 합성 된 멤버 변수를 해제해야합니다. 자동으로 수행되지 않습니다. 예 :

- (void)dealloc
{
    [label release];
    [listValue release];
    [webServiceFieldName release];

    [super dealloc];
}

위의 코드에서 a SearchCriteria 그리고 전화 initSearchFilters 설정합니다 retainCount 결과의 결과 1. 그런 다음 해당 객체를 self.searchFilters ~을 통해 addObject 그런 다음 retaincount가 2로 부딪칩니다. 그 시점에서 전화해야합니다. [searchCriteriaTmp release] RetainCount를 1로 다시 설정합니다 self.searchFilters 파괴된다 retainCount 그런 다음 0이면 객체가 처리됩니다. 추가 전화없이 release 그만큼 retainCount 항상 1이되며 물체는 절대 거래하지 않아 누출이 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top