iphone - 多个释放消息导致 EXC_BAD_ACCESS 崩溃

标签 iphone objective-c crash release nserror

首先我想说我是 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;
    }
}

谢谢你:) 谢。

最佳答案

您不应该释放您不拥有的东西。仅当您调用 allocretain 时,您才拥有某物。在您的示例中,您应该只释放 request

关于iphone - 多个释放消息导致 EXC_BAD_ACCESS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6598313/

相关文章:

iphone - 我的 NSXMLParser 没有解析并返回 null

objective-c - 设置为 nil 后对象仍然存在

iphone - 如何在通用应用程序的ViewController中设置UIImageView框架?

ios - 如何在 Swift 中更改 CDMarkdownKit 中的超链接颜色?

iphone - Objective-C:向 map 添加注释时 EXC_BAD_ACCESS

Java 失败并显示 "Could not reserve enough space for code cache"

crash - 是什么导致我的应用崩溃而没有错误

ios - 苹果第三次拒绝——开发者找不到解决方案

iphone - 通过点击放大 uiwebview?

objective-c - 如何定义一个类别,将方法添加到实现特定协议(protocol)的类中?