开发者

NSCFString leak inVolving NSString

I am getting leak at:

NSString *firstNameStr = [NSString stringWithFormat:@"%s",firstNameString];

CODE:

+(NSString *)getValueForProperty:(ABPropertyID)propertyId
                      forContact:(NSString *)contactId 
{
    i开发者_运维百科f (addressBook == nil)
    {
        addressBook  = ABAddressBookCreate();
    }
    ABRecordID contactIntId = [contactId intValue];
    ABRecordRef person;
    person = ABAddressBookGetPersonWithRecordID(addressBook, contactIntId);

    CFStringRef firstName;
    char *firstNameString;
    firstName = ABRecordCopyValue(person, propertyId);

    // Paso a char* los datos para que se puedan escribir
    static char* fallback = "";
    int fbLength = strlen(fallback);

    int firstNameLength = fbLength;
    bool firstNameFallback = true;

    if (firstName != NULL)
    {
        firstNameLength = (int) CFStringGetLength(firstName);
        firstNameFallback = false;
    }

    if (firstNameLength == 0)
    {
        firstNameLength = fbLength;
        firstNameFallback = true;
    }

    firstNameString = malloc(sizeof(char)*(firstNameLength+1));
    if (firstNameFallback == true)
    {
        strcpy(firstNameString, fallback);
    }
    else
    {
        CFStringGetCString(firstName, firstNameString,
             10*CFStringGetLength(firstName), kCFStringEncodingASCII);
    }

    if (firstName != NULL)
    {
        CFRelease(firstName);
    }

    NSString *firstNameStr = [NSString stringWithFormat:@"%s",firstNameString];

    free(firstNameString);

    return firstNameStr;
}


That means that the object allocated at that point is leaked. In this case, most likely because you over-retained it somewhere and failed to release it.

You need to carefully examine the lifespan of that particular string and figure out where you might be overwriting the reference without a release.

Build & Analyze might help considerably.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜