首先我想说我是 Objective C 和 iPhone 世界的初学者,到目前为止我真的很喜欢它,它真的很有趣。
我来自 PHP 世界,并尝试采用 Objective C 的一些非常不同的概念,例如需要释放自己的对象以避免内存泄漏。
但是我遇到了一个小问题,当我在函数结束时释放超过 1 个变量时,应用程序会因某种原因崩溃并出现 EXC_BAD_ACCESS
错误。我确信这是一些小而愚蠢的事情,但我有点无能为力。
非常感谢您的指导,这是我的代码:
+ (id) getJsonFromURL: (NSURL *)url withQueryString: (NSString *)queryString withMethod: (NSString *)HTTPMethod error: (NSError **)outError{
// Initialize request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSData *requestData = [NSData dataWithBytes:[queryString UTF8String] length: [queryString length]];
// Set request data and method
[request setHTTPMethod:HTTPMethod];
[request setHTTPBody:requestData];
// Perform request
NSURLResponse *uResp = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&uResp error:nil];
// Make sure HTTP Request was successful (HTTP Code 200)
NSInteger httpStatus = [((NSHTTPURLResponse *)uResp) statusCode];
if(httpStatus != 200){
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setValue:[NSString stringWithFormat:@"The requested URL could not be read (HTTP Code: %d)", httpStatus] forKey: NSLocalizedDescriptionKey];
}[NSException raise:@"MerchGuru.BadURL" format:@"The URL couldn't be read (HTTP Code: %d)", httpStatus];
// Decode JSON Output
NSError *jsonError = nil;
id respData = [[CJSONDeserializer deserializer] deserialize:returnData error:&jsonError];
if(jsonError != nil){
if(outError != nil){
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setValue:@"The JSON Output provided isn't valid JSON!" forKey:NSLocalizedDescriptionKey];
*outError = [NSError errorWithDomain:@"com.freak4pc.merchguru" code:6001 userInfo: userInfo];
[userInfo release];
NSLog(@"%@", [*outError localizedDescription]);
}
[respData release];
[jsonError release];
[returnData release];
[uResp release];
[requestData release];
[request release];
return nil;
}else{
[respData release];
[jsonError release];
[returnData release];
[uResp release];
[requestData release];
[request release];
return respData;
}
}
谢谢你:) 谢。
最佳答案
您不应该释放
您不拥有的东西。仅当您调用 alloc
或 retain
时,您才拥有某物。在您的示例中,您应该只释放 request
关于iphone - 多个释放消息导致 EXC_BAD_ACCESS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6598313/