Dear Developers, I am getting a potential leak in these methods..can anyone please help me..Leak in method 1 is in line 5..I am referencing this method from another class as [sync loginHandler] where sync is an object of the class which has the method loginHandler..
-(void) loginHandler
{
1 SCRMsugarsoap* service = [[SCRMsugarsoap alloc] initWithUrl:serverURL];
2 service.logging = YES;
3 service.username = userName;
4 service.password = password;
5 [service login:self action:@selector(sessionIdHandler:) user_auth: [[[SCRMuser_auth alloc] initWithUsername:userName andPassword:password]autorelease] application_name: @""];
6 [service release];
}
And another method where I have problems with leaks is
-(NSMutableArray *)searchContacts:(NSString *)tableName bySearchString:(NSString *)searchString
{
1 NSString *sid=@"";
2 NSString *firstname=@"";
3 NSString *lastname=@"";
4 NSString *qsql;
//NSArray *contactArray=[[NSArray alloc]init];
5 searchArray=[[NSMutableArray alloc]init];
6 qsql=[NSString stringWithFormat:@"SELECT DISTINCT sugar_id,first_name,last_name FROM CONTACTS where last_name LIKE '%%%@%%' OR first_name LIKE '%%%@%%' GROUP BY sugar_id ORDER BY last_name",searchString,searchString];
7 sqlite3_stmt *statement;
8 if (sqlite3_prepare_v2( db, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK) {
9 while (sqlite3_step(statement) == SQLITE_ROW)
10 {
//TODO: alloc Contact object
11 Contact *contacts=[[Contact alloc]init];
12 sid = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
13 firstname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
14 lastname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)];
15
16 if ([firstname isEqualToString:@"(null)"]) {
lastname=[lastname stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[lastname substringToIndex:1] uppercaseString]];
17 contacts.lastName=lastname;
18 contacts.sugarId=sid;
19 contacts.firstName=@"";
}
20 else {
21 firstname=[firstname stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[firstname substringToIndex:1] uppercaseString]];
22 lastname=[lastname stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[lastname substringToIndex:1] uppercaseString]];
23 contacts.firstName=firstname;
24 contacts.lastName=lastname;
25 contacts.sugarId=sid;
}
26 [searchArray addObject:contacts];
//searchArray=[NSMutableArray arrayWithObjects:contacts];
//TODO: Release contacts variable
27 [contacts release];
28 [sid release]; //not sure about releasing these objects..just gave a try
29 [firstname release];
30 [lastname release];
31 firstname = nil;
32 lastname = nil;
33 sid=nil;
}
34 sqlite3_reset(statement);
}
35 sqlite3_finalize(statement);
36 return searchArray;
}
I am releasing searchArray in dealloc method. The leaks are between lines 5,11-14,16,21,22.These lines vary whenever I try to fiddle with the code..please help me guys..waiting for your suggestions..
I tried using instruments and these are the areas figured out using it..Can I also use build and analyze in xcode..I used that and made some changes to the code..
EDIT (Added methods that code 1 refers)
- (id) initWithUsername: (NSString*) username andPassword: (NSString*) pass
{
if(self = [super init])
{
Soap *converter = [[Soap alloc] init];
SCRMsugarsoap *service = [[SCRMsugarsoap alloc] init];
[service get_server_version:self action:@selector(get_server_versionHandler:)];
self.user_name = username;
self.password = [converter tomd5:pass];
[converter release];
[service release];
}
return self;
}
-(NSString*)tomd5:(NSString*)value{
const char *cStr = [value UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStr, strlen(cStr), result);
return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15]
];
}