Я получаю потенциальную утечку в этих методах ... может кто-нибудь, пожалуйста, помогите мне ... Утечка в методе 1 находится в строке 5. Я ссылаюсь на этот метод из другого класса как [sync loginHandler], где sync является объектомкласс, который имеет метод 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];
}
И еще один метод, в котором у меня есть проблемы с утечками:
-(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;
}
Я выпускаю searchArray в методе dealloc.Утечки находятся между строками 5,11-14,16,21,22.Эти строки меняются всякий раз, когда я пытаюсь поиграться с кодом .. Пожалуйста, помогите мне, ребята .. Жду ваших предложений ..
Я пыталсяиспользуя инструменты, и это те области, которые были определены с его помощью. Могу ли я также использовать сборку и анализ в xcode .. Я использовал это и внес некоторые изменения в код ..
EDIT (Добавлены методы, которыекод 1 относится)
- (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]
];
}