Iphone 我应该释放NSURL吗?
我有以下代码:Iphone 我应该释放NSURL吗?,iphone,memory-management,memory-leaks,instruments,Iphone,Memory Management,Memory Leaks,Instruments,我有以下代码: + (BOOL)updateStatus:(NSString *)status forUsername:(NSString *)username withPassword:(NSString *)password { NSURL *loginURL = [NSURL URLWithString:@"XYZ"]; ASIFormDataRequest *loginRequest = [[ASIFormDataRequest requestWithURL:loginURL]
+ (BOOL)updateStatus:(NSString *)status forUsername:(NSString *)username withPassword:(NSString *)password {
NSURL *loginURL = [NSURL URLWithString:@"XYZ"];
ASIFormDataRequest *loginRequest = [[ASIFormDataRequest requestWithURL:loginURL] retain];
[loginRequest setPostValue:@VALUE forKey:@"SOME_KEY"];
[loginRequest setPostValue:username forKey:@"username"];
[loginRequest setPostValue:password forKey:@"password"];
[loginRequest startSynchronous];
int loginStatusCode = [loginRequest responseStatusCode];
[loginRequest release];
if (loginStatusCode == 200) { //if we were able to login
NSURL *updateURL = [NSURL URLWithString:@"ABC"];
ASIFormDataRequest *updateRequest = [[ASIFormDataRequest requestWithURL:updateURL] retain];
[updateRequest setPostValue:@VALUE forKey:@"SOME_KEY"];
[updateRequest setPostValue:VALUE forKey:@"SOME_KEY"];
[updateRequest setPostValue:@"VALUE" forKey:@"SOME_KEY"];
[updateRequest startSynchronous];
int statusCode = [updateRequest responseStatusCode];
[updateRequest release];
NSURL *logoutURL = [NSURL URLWithString:@"ABC"];
ASIFormDataRequest *logoutRequest = [ASIFormDataRequest requestWithURL:logoutURL];
[logoutRequest setPostValue:VALUE forKey:@"KEY"];
[logoutRequest startSynchronous];
[logoutRequest release];
if (statusCode == 200) { /
return YES;
} else {
return NO;
}
} else {
return NO;
}
}
我使用仪器在模拟器上运行代码,它报告以下泄漏:
指向以下行:
NSURL *loginURL = [NSURL URLWithString:@"XYZ"];
我非常确定我不必释放NSURL(由于我只需要释放使用init或copy创建的对象的约定)。我错了吗?还是代码有其他问题?为什么要发布logoutRequest?你没有保留它
我认为您使用NSURL没有任何问题,它们都是自动删除的。据我所知,您是正确的。您不需要发布loginURL 但是我注意到,在代码的其他地方,您确实超出了
logoutRequest
// Note no retain of logoutRequest here as is done elsewhere
ASIFormDataRequest *logoutRequest = [ASIFormDataRequest requestWithURL:logoutURL];
// ...
[logoutRequest release];
哦,是的,我添加了发布代码,因为Instruments向我显示了另一个与logoutRequest和loginRequest相关的泄漏。你知道为什么Intruments会向我显示漏洞吗?这是用什么函数运行的?尝试使用
[[NSURL alloc]initWithString:@“XYZ”]
并在完成后释放它。那会泄露吗?