另外我知道我使用alloc创建的任何内容都必须释放它,但是当我尝试使用[request release]释放'request'对象时;它抛出以下错误:
Program received signal: “EXC_BAD_ACCESS”.
kill
error while killing target (killing anyway): warning: error on line 2179 of "/SourceCache/gdb/gdb-1510/src/gdb/macosx/macosx-nat-inferior.c" in function "macosx_kill_inferior_safe": (os/kern) failure (0x5x)
答案 0 :(得分:2)
您正在使用requestWithURL:cachePolicy:timeoutInterval:
创建请求。由于该方法名称不以“alloc”或“new”开头或包含“copy”,因此根据Memory Management Rules您不拥有它,因此不应该释放它(除非您在其上调用retain)当然,明确地说。)
至于效率,代码似乎很好。但请注意,如果用户可以在第一次加载之前触发第二次加载,那么您将遇到问题;解决方法是要么阻止这样的事情,要么将load
中创建的NSURLConnection对象保存到ivar中,然后让伪委托方法在执行任何其他操作之前检查传递的连接。当你释放它以前包含的对象时,将ivar设置为nil也是一个好主意,因为那样你就不会意外地使用释放的对象。我注意到“身份验证失败”警报的变量名称是alertsuccess
,这是误导性的;)
答案 1 :(得分:-1)
在你的加载函数中尝试这个:
NSMutableURLRequest *request;
request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:pageUrl]];
NSURLResponse *response;
NSError *error = [[NSError alloc] init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];`
NSString * responseString = [NSString stringWithCString:[data bytes] length:[data length]]; `