Я немного новичок в поиске утечек памяти в цели c и способах их устранения. Я знаю, как использовать alloc / init / copy и release / retain, но (по крайней мере, я так думаю :-)), но у меня есть некоторые странные утечки памяти в моем приложении IOS.
-(void) sendStats {
// read the app settings
plistHandler *readData = [[plistHandler alloc] init];
[readData setPlistName:@"Settings"];
NSDictionary *settingsArray = [readData readPlist];
[readData release];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:[NSString stringWithFormat:@"%@", [settingsArray objectForKey:@"range"]]];
[f release];
int rangeForUrl;
if(myNumber != nil) {
rangeForUrl = [myNumber intValue];
} else {
rangeForUrl = 10;
}
// get uniqe device ID
UIDevice *getdev = [UIDevice currentDevice];
NSString *uniqueIdentifier = [getdev uniqueIdentifier];
NSString *deviceId = [NSString stringWithFormat:@"IOS-%@", uniqueIdentifier];
// get the unix timestamp
NSDate * past = [NSDate date];
NSTimeInterval oldTime = [past timeIntervalSince1970];
NSString * unixTime = [[[NSString alloc] initWithFormat:@"%0.0f", oldTime] autorelease];
// send the data with a post request to the API
HttpRequest *data = [[HttpRequest alloc] init];
data.postData = [NSString stringWithFormat:@"&device=%@&age=%@&gender=%@&latitude=%@&longitude=%@×tamp=%@", deviceId, [settingsArray objectForKey:@"age"], [settingsArray objectForKey:@"gender"], @"00", @"00", unixTime];
data.controller = @"sendDevice";
NSString *url = [NSString stringWithFormat:@"http://www..eu/api/send_device"];
[data loadHostName:url];
[data release];
//NSLog(@"string s: %@", data.postData);
}
Это утечка памяти в соответствии с инструментами Xcode => утечки:
Утечка объекта # Размер адреса Ответственная библиотека Ответственный кадр
NSCFString, 0x16cb40 144 байта Основание - [NSPlaceholderString initWithFormat: locale: arguments:]
Это строка с «data.postData = ...» в моем коде. Кто-нибудь может мне помочь?
так я использую postData в классе httpRequest:
- (void)loadHostName:(NSString *)hostName {
responseData = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", hostName]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
if(authString) {
[request setValue:authString forHTTPHeaderField:@"Authorization"];
}
if([postData isKindOfClass:[NSString class]] && postData != @"") {
NSData *dataToPost = [postData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[dataToPost length]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:dataToPost];
}
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection release];
}
с конечно:
NSString * postData;
@property (nonatomic, retain) NSString * postData;
и
@ синтезировать postData;