我是编程obj-c的新手。那么,什么时候我会释放定义的对象? 我是否必须发布urlRequest,响应,数据和内容?
- (NSString*)getContentFromUrl:(NSURL*)url {
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] init];
[urlRequest setHTTPMethod:@"GET"];
[urlRequest setURL:url];
NSHTTPURLResponse *response = NULL;
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:nil];
NSString *content = NULL;
if ([response statusCode] >= 200) {
content = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
}
[content autorelease];
return content;
}
答案 0 :(得分:1)
您必须仅发布urlRequest
。 response
,data
已经创建为自动释放的对象,content
在返回之前收到自动释放消息(我建议仅使用return [content autorelease]
更改最后两行)。
将对象指针初始化为nil
而不是NULL
也更为常见。
如果您在任何对象上调用alloc
,copy
,retain
或new
,并且在初始化或重新分配对象时,Cocoa有一个约定,您必须release
它们除非在创建后收到autorelease
消息。
您可以从代码中看到,只有urlRequest
和content
变量是使用alloc
方法创建的,因此它们必须[自动]发布。
更新评论
如果您将urlRequest
作为实例变量,则先前启动的变量可能会影响ivar,您可能会遇到各种麻烦(例如EXC_BAD_ACCESS
)。您最好为本地变量选择一个不同的名称。