2013-06-16 3 views
1

인스트루먼트는 다음 코드 누수를 보여줍니다.이 코드를 주석 처리하면 유출이 없습니다.왜 executeFetchRequest가 : fetchRequest가 메모리를 유출하나요?

[self.managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) 

fetchRequest 및/또는 블록과 누설 것으로 보인다 :

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

    // Edit the entity name as appropriate. 

    NSEntityDescription *entity = [NSEntityDescription entityForName:USER_CORE_DATA inManagedObjectContext:self.managedObjectContext]; 

    [fetchRequest setEntity:entity]; 

    NSPredicate *predicte = [NSPredicate predicateWithFormat:@"username == %@", [[User defaultManager] savedUsername]]; 
    [fetchRequest setPredicate:predicte]; 

    // set any predicates or sort descriptors, etc. 

    // execute the request 
    [self.managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) { 

    } onFailure:^(NSError *error) { 

     NSLog(@"Error fetching: %@", error); 

    }]; 
    [fetchRequest release]; 

특히 악기 위 코드에서이 선은 말한다. 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

이러한 복잡성은 ... 내가 thiese을 ARC로 변환합니다. –

답변

0

실제로 StackMob은 코드에서 누수가 있음이 밝혀졌으며 소스를 다운로드하여 수정했습니다.

- (NSString *)primaryKeyField 
{ 
    NSString *objectIdField = nil; 

    // Search for schemanameId 
    objectIdField = [[self SMSchema] stringByAppendingFormat:@"Id"]; 
    if ([[[self entity] propertiesByName] objectForKey:objectIdField] != nil) { 
     return objectIdField; 
    } 

    objectIdField = nil; // This line was missing and causing a leak 

    // Search for schemaname_id 
    objectIdField = [[self SMSchema] stringByAppendingFormat:@"_id"]; 
    if ([[[self entity] propertiesByName] objectForKey:objectIdField] != nil) { 
     return objectIdField; 
    } 

    objectIdField = nil; // This line was missing and causing a leak 

    // Raise an exception and return nil 
    [NSException raise:SMExceptionIncompatibleObject format:@"No Attribute found for `entity %@ which maps to the primary key on StackMob. The Attribute name should match one of the following formats: lowercasedEntityNameId or lowercasedEntityName_id. If the managed object subclass for %@ inherits from SMUserManagedObject, meaning it is intended to define user objects, you may return either of the above formats or whatever lowercase string with optional underscores matches the primary key field on StackMob.", [[self entity] name], [[self entity] name]];` 
0

executeFetchRequest:onSuccess:onFailure:은 NSManagedObjectContext 범주에 정의한 함수입니다. onSuccess 블록으로 전달할 NSArray 객체 인스턴스가 자동으로 릴리즈되었는지 확인하십시오.

+0

그건 기능이 아닙니다, 그것은 블록입니다. –

+0

@AnoopVaidya C'mon .. executeFetchRequest : onSuccess : onFailure : 함수입니다. onSuccess 및 onFailure에 전달 된 인수는 블록입니다! – Adithya

+0

'executeFetchRequest : onSuccess : onFailure :'StackMob의 라이브러리에 정의 된 함수로, 볼 수있는 함수가 아닙니다. NSArray를 직접 풀어서 변경 사항이 있는지 확인할 수 있습니다. –