0
im new with objective-c。私は、iPhoneアプリを開発するときにメモリリークに問題があります。 Xcodeのユーティリティが漏れていると、 'combArr' - > 'results'オブジェクトの問題が漏れていることがわかります。そこのURLからJSONを解析し、私の関数であり、NSArrayのを返します。Iphone SDK、メモリリーク
- (NSArray *)getListing2:(NSString *)item
from:(int)country {
//sending post request with some params
NSString *post = [@"product=" stringByAppendingString:item];
NSString *countryStr = [NSString stringWithFormat:@"&country=%d", country];
post = [post stringByAppendingString:countryStr];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *url = [prefs objectForKey:@"urlToApi"];
url = [url stringByAppendingString:@"/get-items/"];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
[request release];
//receiving json
NSString *jsonString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
SBJsonParser *json = [[SBJsonParser alloc] init];
NSError *error = nil;
//parsing json to nsdictionary
NSDictionary *results = [[NSDictionary alloc] initWithDictionary:[json objectWithString:jsonString error:&error]];
[json release];
[jsonString release];
//generate array of items
NSMutableArray *listOfItems = [[NSMutableArray alloc] init];
for (int i = 0; i < [[results objectForKey:@"data"] count]; i++) {
[listOfItems addObject:[[results objectForKey:@"data"] objectForKey:[NSString stringWithFormat:@"%d", i]]];
}
//saving items array and count info object into one array
NSArray * returnArr = [[[NSArray arrayWithObjects:listOfItems, [results valueForKey:@"count_info"], nil] retain] autorelease];
[listOfItems release];
[results release];
return returnArr;
}
、私はここに、この関数を実行:
myApi *itemsApi = [[myApi alloc] init];
NSArray *combArr = [[izdApi getListing2:item from:countryId] retain];
[itemsApi release];
listOfItems = [[combArr objectAtIndex:0] retain];
if([listOfItems count] > 0){
priceArr = [[combArr objectAtIndex:1] retain];
}
else{
totalCount = 0;
}
[combArr release];
は
まだ漏れている場合は、[listOfItems release];と '[priceArr release];'を追加してみてください。またはあなたが後でそれらを解放することを確認してください! –
これは私には役に立ちませんでした。後で、 'listOfItems'と 'priceArr'を他のアクションでリリースしました。 'getListing2'関数を実行してgetListing2を再度設定するより – Testme
'itemsApi'以外のオリジナルコードから解放されたものは表示されません。まず、あなたがここに投稿したコードからそれが漏れていることを確かめますか?次に、 '[listOfItems release];と' [priceArr release]; 'がどちらも後で実行されるのでしょうか?ここにブレークポイントを追加して、デバッガを使用して各コード行にステップを進めて、それらのオブジェクトが実際にリリースされていることを確認してください。 –