gpt4 book ai didi

iphone - iOS:了解发布 NSString 的问题

转载 作者:行者123 更新时间:2023-11-28 18:44:06 25 4
gpt4 key购买 nike

我有以下代码:

+ (NSDictionary*) JSONRequest: (NSString*)query andWithCredentials:(BOOL)withCredentials
{
if (withCredentials)
{
NSString *username = [LoginHandler GetUsernameFromNSDefaults];
NSString *password = [LoginHandler GetPasswordFromNSDefaults];
NSString *additionalQuery = [NSString stringWithFormat:@"login_username=%@&login_password=%@", username, password];

query = [NSString stringWithFormat:@"%@&%@", query, additionalQuery];

[username release];
[password release];
[additionalQuery release];
}

NSURLRequest *request = [NSURLRequest requestWithURL:
[NSURL URLWithString:query]];

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSString *jsonString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *results = [jsonString JSONValue];
return results;

[request release];
[response release];
[jsonString release];
[results release];

}

问题是附加查询-NSString 的释放。当我运行这段代码时,它以

的 BAD-ACCES-EXCEPTION 结尾
[additionalQuery release];

只要我注释掉它,代码就可以正常工作。

现在,尽管如此简单,但无需这行代码即可运行我的应用程序,但我的问题是:我哪里错了?

我在 IF 子句中生成一个 NSString,然后我可以只在 IF 子句中释放它。但为什么我在那里遇到错误?

最佳答案

查看您创建的 additionalQuery

NSString *additionalQuery = [NSString stringWithFormat:@"login_username=%@&login_password=%@", username, password];

使用 stringWithFormat 你可以创建一个自动释放的 NSString 对象。您不得根据内存管理规则手动释放它,因为您不拥有它。

您只拥有您使用 alloc] init..] 创建的东西,或者名称中带有 new.. 或 create.. 的东西,当然如果您进行复制,例如 mutableCopy。

所以 [additionalQuery release] 导致过度释放一个对象,因此它是一个错误的访问

关于iphone - iOS:了解发布 NSString 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6966779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com